commit dee65a1d8755d31afe36a52d17feb0969b1e6658
parent 941ef2fe5575b30f0a744fb034523df7ac213aa2
Author: Marcel <MTRNord@users.noreply.github.com>
Date: Sun, 11 Sep 2016 20:23:17 +0200
Merge pull request #12 from MTRNord/v0.0.2
Add function node
Diffstat:
6 files changed, 252 insertions(+), 136 deletions(-)
diff --git a/handlers/getNodes.js b/handlers/getNodes.js
@@ -1,121 +0,0 @@
-/**
- * NodeHelper Module
- *
- * @module Main
- * @class getNodes
- * @submodule getNodes
- * @author Marcel Radzio
- */
-//Load needed Features
-var request = require('request')
-//require('request-debug')(request);
-var fs = require('fs');
-var jsonfile = require('jsonfile')
-var slack = require('./slack.js');
-var _ = require("lodash");
-/**
- * Get Community Config at start
- *
- * @property communities
- * @type String
- */
-module.exports = {
- saveNodes: function () {
- request.get('https://cdn.rawgit.com/MTRNord/gluon-web-remote/5bd3a914b3c15af70b3ce46b3bfcc16bbc7b89b5/configs/communities.json', function (err, res, body) {
-
- if (!err && res.statusCode === 200) {
- /**
- * Content of communities
- *
- * @property communities
- * @type String
- */
- communities = body;
- if (!fs.existsSync("handlers/tmp")){
- fs.mkdirSync("handlers/tmp");
- }
- fs.writeFile("handlers/tmp/communities.json", communities, { flag: 'w' }, function(err) {
- if(err) {
- console.log(err);
- return err
- }
- });
- }else{
- /**
- * Fired when an error occurs...
- *
- * @property error
- * @type String
- */
- //TODO Add real Error Handler
- console.log(err);
- return err
- }
- })
- },
- countNodes: function (ccode_func, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
- jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
- if (err) {
- return console.log(err);
- }
- var communities = obj
- _.find(communities.communities, function (key) {
- var ccode = key["ccode"];
- if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
- var nodesFile_link = key["nodesURL"];
- var name = key["name"];
- request.get(nodesFile_link, function (err, res, body) {
- if (!err && res.statusCode == 200) {
- /**
- * Content of communities
- *
- * @property communities
- * @type String
- */
- // console.log(body);
- // onlineNodes = body.nodes.length
- // onlineNodes = Object.keys(body.nodes).length;
- var count = 0;
- nodes = JSON.parse(body)
- _.find(nodes.nodes, function (key) {
- if (key.hasOwnProperty('flags')) {
- if (key["flags"]["online"] == true) {
- count++;
- }
- }
- if (key.hasOwnProperty('status')) {
- if (key["status"]["online"] == true) {
- count++;
- }
- }
- });
- var output = "Current nodes in " + name + ": " + count
- if(handler == "telegram"){
- bot.sendMessage(TfromId, output)
- botan.track(Tmsg, 'nodes ' + ccode_func)
- }else {
- if(handler == "irc"){
- bot.say(IRCto, output);
- }else {
- if(handler == "slack"){
- slack.slackSend(Schannel, output);
- }
- }
- }
- }else{
- /**
- * Fired when an error occurs...
- *
- * @property error
- * @type String
- */
- //TODO Add real Error Handler
- console.log(err);
- return err
- }
- })
- }
- });
- });
- }
-}
diff --git a/handlers/irc.js b/handlers/irc.js
@@ -18,7 +18,7 @@ var rl = require("readline")
var command_config = require("../configs/commands.json");
var params_config = require("../configs/ircServer.json");
-var getNodes = require('./getNodes.js');
+var getNodes = require('./parseNodes.js');
//Set Params
/**
@@ -80,7 +80,7 @@ _.find(params_config["servers"], function (key) {
autoConnect: false,
messageSplit: 1000000,
floodProtection: true,
- floodProtectionDelay: 1000
+ floodProtectionDelay: 200
});
clients.push(bot[key]);
}
@@ -287,7 +287,7 @@ module.exports = {
nodes: function (callback) {
if (S(message).contains("!nodes")) {
jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
- if (err) {console.log(err)}
+ if (err) {throw new Error(err);}
var communities = obj
_.find(communities.communities, function (key) {
var ccode = key["ccode"];
@@ -300,10 +300,29 @@ module.exports = {
});
}
},
+ node: function (callback) {
+ if (S(message).contains("!node") || !S(message).contains("!nodes")) {
+ jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
+ if (err) {throw new Error(err);}
+ var communities = obj
+ _.find(communities.communities, function (key) {
+ var ccode = key["ccode"];
+ if (ccode.toLowerCase() === channel[1]) {
+ clients.forEach(function(client) {
+ if (channel[2] == undefined) {
+ channel[2] = "NoArg"
+ }
+ getNodes.NodeInfo(channel[1], channel[2].toLowerCase(), "irc", "", "", "", client, "", from)
+ });
+ }
+ });
+ });
+ }
+ },
communities: function (callback) {
if (S(message).contains("!communities")) {
jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
- if (err) {console.log(err)}
+ if (err) {throw new Error(err);}
var communities = obj
var communities_list = ""
_.find(communities.communities, function (key) {
@@ -334,7 +353,7 @@ module.exports = {
* @type String
*/
door_status = error;
- console.log(error);
+ throw new Error(err);
}
if (!error && response.statusCode === 200) {
if (door_status === "geschlossen") {
@@ -370,7 +389,7 @@ module.exports = {
* @type String
*/
door_status = error;
- console.log(error);
+ throw new Error(err);
}
if (!error && response.statusCode == 200) {
if (door_status === "geschlossen") {
@@ -431,7 +450,7 @@ module.exports = {
},
function(err, result) {
if (err) {
- console.log(err)
+ throw new Error(err);
}
}
);
diff --git a/handlers/parseNodes.js b/handlers/parseNodes.js
@@ -0,0 +1,198 @@
+/**
+ * NodeHelper Module
+ *
+ * @module Main
+ * @class getNodes
+ * @submodule getNodes
+ * @author Marcel Radzio
+ */
+//Load needed Features
+var request = require('request')
+//require('request-debug')(request);
+var fs = require('fs');
+var jsonfile = require('jsonfile')
+var slack = require('./slack.js');
+var _ = require("lodash");
+/**
+ * Get Community Config at start
+ *
+ * @property communities
+ * @type String
+ */
+module.exports = {
+ saveNodes: function () {
+ request.get('https://cdn.rawgit.com/MTRNord/gluon-web-remote/5bd3a914b3c15af70b3ce46b3bfcc16bbc7b89b5/configs/communities.json', function (err, res, body) {
+ if (!err && res.statusCode === 200) {
+ /**
+ * Content of communities
+ *
+ * @property communities
+ * @type String
+ */
+ communities = body;
+ if (!fs.existsSync("handlers/tmp")){
+ fs.mkdirSync("handlers/tmp");
+ }
+ fs.writeFile("handlers/tmp/communities.json", communities, { flag: 'w' }, function(err) {
+ if(err) {
+ console.log(err);
+ return err
+ }
+ });
+ }else{
+ /**
+ * Fired when an error occurs...
+ *
+ * @property error
+ * @type String
+ */
+ //TODO Add real Error Handler
+ console.log(err);
+ return err
+ }
+ })
+ },
+ countNodes: function (ccode_func, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
+ jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
+ if (err) {
+ return console.log(err);
+ }
+ var communities = obj
+ _.find(communities.communities, function (key) {
+ var ccode = key["ccode"];
+ if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
+ var nodesFile_link = key["nodesURL"];
+ var name = key["name"];
+ request.get(nodesFile_link, function (err, res, body) {
+ if (!err && res.statusCode == 200) {
+ /**
+ * Content of communities
+ *
+ * @property communities
+ * @type String
+ */
+ var count = 0;
+ nodes = JSON.parse(body)
+ _.find(nodes.nodes, function (key) {
+ if (key.hasOwnProperty('flags')) {
+ if (key["flags"]["online"] == true) {
+ count++;
+ }
+ }
+ if (key.hasOwnProperty('status')) {
+ if (key["status"]["online"] == true) {
+ count++;
+ }
+ }
+ });
+ var output = "Current nodes in " + name + ": " + count
+ if(handler == "telegram"){
+ bot.sendMessage(TfromId, output)
+ botan.track(Tmsg, 'nodes ' + ccode_func)
+ }else {
+ if(handler == "irc"){
+ bot.say(IRCto, output);
+ }else {
+ if(handler == "slack"){
+ slack.slackSend(Schannel, output);
+ }
+ }
+ }
+ }else{
+ /**
+ * Fired when an error occurs...
+ *
+ * @property error
+ * @type String
+ */
+ //TODO Add real Error Handler
+ throw new Error(err);
+ }
+ })
+ }
+ });
+ });
+ },
+ NodeInfo: function (ccode_func, askedNode, handler, TfromId, Tmsg, channel, bot, botan, IRCto) {
+ jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
+ if (err) {
+ throw new Error(err);
+ }
+ var communities = obj
+ _.find(communities.communities, function (key) {
+ var ccode = key["ccode"];
+ if (ccode.toLowerCase() == ccode_func.toLowerCase()) {
+ var nodesFile_link = key["nodesURL"];
+ request.get(nodesFile_link, function (err, res, body) {
+ if (!err && res.statusCode == 200) {
+ /**
+ * Content of communities
+ *
+ * @property communities
+ * @type String
+ */
+ var count = 0;
+ nodes = JSON.parse(body)
+ var output = "Some error"
+ var name = ""
+ var router = ""
+ var version = ""
+ var autoupdate = ""
+ var autoupdateBranch = ""
+ var clients = ""
+ var status = ""
+ var since = ""
+ _.find(nodes.nodes, function (key) {
+ name = key["nodeinfo"]["hostname"]
+ if (name.toLowerCase() == askedNode.toLowerCase()){
+ router = key["nodeinfo"]["hardware"]["model"]
+ version = key["nodeinfo"]["software"]["firmware"]["release"]
+ autoupdate = key["nodeinfo"]["software"]["autoupdater"]["enabled"]
+ if (autoupdate === true) {
+ autoupdate = "active"
+ }else{
+ autoupdate = "unactive"
+ }
+ autoupdateBranch = key["nodeinfo"]["software"]["autoupdater"]["branch"]
+ clients = key["statistics"]["clients"]
+ status = key["flags"]["online"]
+ since = key["firstseen"]
+ if(handler == "telegram"){
+ output = "<b>Name: </b>" + name + "\n<b>Router Model: </b>" + router + "\n<b>Firmware Version: </b>" + version + "\n<b>Autoupdater Status: </b>" + autoupdate + "\n<b>Autoupdater Branch: </b>" + autoupdateBranch + "\n<b>Clients Connected: </b>" + clients + "\n<b>Online Status: </b>" + status + "\n<b>First Seen: </b>" + since
+ }
+ if(handler == "irc"){
+ output = "Name: " + name + "\nRouter Model: " + router + "\nFirmware Version: " + version + "\nAutoupdater Status: " + autoupdate + "\nAutoupdater Branch: " + autoupdateBranch + "\nClients Connected: " + clients + "\nOnline Status: " + status + "\nFirst Seen: " + since
+ }
+ if(handler == "slack"){
+ output = "<b>Name: </b>" + name + "\n<b>Router Model: </b>" + router + "\n<b>Firmware Version: </b>" + version + "\n<b>Autoupdater Status: </b>" + autoupdate + "\n<b>Autoupdater Branch: </b>" + autoupdateBranch + "\n<b>Clients Connected: </b>" + clients + "\n<b>Online Status: </b>" + status + "\n<b>First Seen: </b>" + since
+ }
+ }
+ });
+ if (askedNode.toLowerCase() !== "noarg") {
+ if(handler == "telegram"){
+ bot.sendMessage(TfromId, output, {"parse_mode": "HTML"})
+ botan.track(Tmsg, 'node ' + ccode_func)
+ }
+ if(handler == "irc"){
+ bot.say(IRCto, output);
+ }
+ if(handler == "slack"){
+ slack.slackSend(Schannel, output);
+ }
+ }
+ }else{
+ /**
+ * Fired when an error occurs...
+ *
+ * @property error
+ * @type String
+ */
+ //TODO Add real Error Handler
+ throw new Error(err);
+ }
+ })
+ }
+ });
+ });
+ }
+}
diff --git a/handlers/pushbullet.js b/handlers/pushbullet.js
@@ -28,7 +28,7 @@ module.exports = {
* @property err
* @type String
*/
- console.log(err);
+ throw new Error(err)
}
});
}
diff --git a/handlers/telegram.js b/handlers/telegram.js
@@ -8,7 +8,7 @@ if (typeof botan_token === 'undefined' && !botan_token) {
}
var TelegramBot = require('node-telegram-bot-api');
var jsonfile = require('jsonfile')
-var getNodes = require('./getNodes.js');
+var getNodes = require('./parseNodes.js');
var botan = require('botanio')(botan_token);
var util = require('util');
var async = require("async");
@@ -24,7 +24,7 @@ module.exports = {
var resp = match[1];
bot.sendChatAction(fromId, "typing")
jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
- if (err) {console.log(err)}
+ if (err) {throw new Error(err);}
var communities = obj
_.find(communities.communities, function (key) {
var ccode = key["ccode"];
@@ -36,6 +36,25 @@ module.exports = {
});
callback()
},
+ node: function (callback) {
+ bot.onText(/\/node (.+)/, function (msg, match) {
+ var fromId = msg.chat.id;
+ var resp = match[1];
+ var args = _.split(resp, ' ');
+ bot.sendChatAction(fromId, "typing")
+ jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
+ if (err) {throw new Error(err);}
+ var communities = obj
+ _.find(communities.communities, function (key) {
+ var ccode = key["ccode"];
+ if (ccode.toLowerCase() === args[0].toLowerCase()) {
+ getNodes.NodeInfo(args[0].toLowerCase(), args[1].toLowerCase(), "telegram", fromId, msg, "", bot, botan)
+ }
+ });
+ });
+ });
+ callback()
+ },
communities: function (callback) {
bot.onText(/\/communities/, function (msg, match) {
var fromId = msg.chat.id;
@@ -43,7 +62,7 @@ module.exports = {
bot.sendChatAction(fromId, "typing")
jsonfile.readFile('handlers/tmp/communities.json', 'utf8', function (err,obj) {
var communities = obj
- var communities_list
+ var communities_list = ""
_.find(communities.communities, function (key) {
var ccode = key["ccode"]
var name = key["name"]
@@ -51,7 +70,7 @@ module.exports = {
});
botan.track(msg, 'communities', function (err, res, body) {
if (err) {
- console.log("[BOTAN] ERR: " + err);
+ throw new Error("[BOTAN] ERR: " + err);
}
console.log("[BOTAN] RES: " + res.statusCode);
console.log("[BOTAN] BODY: " + util.inspect(body, {showHidden: false, depth: null}));
@@ -64,7 +83,7 @@ module.exports = {
},
function(err, result) {
if (err) {
- console.log(err)
+ throw new Error(err)
}
}
);
diff --git a/main.js b/main.js
@@ -21,7 +21,7 @@ require('./helper/heroku.js');
var pushbullet = require('./handlers/pushbullet.js');
var irc = require('./handlers/irc.js');
var slack = require('./handlers/slack.js');
-var getNodes = require('./handlers/getNodes.js');
+var getNodes = require('./handlers/parseNodes.js');
var telegram = require('./handlers/telegram.js');
//Constants
@@ -60,6 +60,7 @@ function GetData(){
*/
//TODO Add real Error Handler
door_status = error;
+ throw new Error(err)
}
//If no error -> go on
if (!error && response.statusCode === 200) {
@@ -119,7 +120,7 @@ process.on(SIGINT, function () {
*/
function update(){
git.pull("origin", "master", function(err, update) {
- if (err) {console.log(err)}
+ if (err) {throw new Error(err)}
if(update && update.summary.changes) {
console.log('Start Update!');
restart();