Adding Server Checkin
- Update client handler to check IP - Add checkin to startup - Add acceptable commands - Needs linux command - Needs testing
This commit is contained in:
@@ -8,6 +8,7 @@ require('dotenv').config();
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const { DebugBuilder } = require("./utilities/debugBuilder");
|
const { DebugBuilder } = require("./utilities/debugBuilder");
|
||||||
const deployCommands = require('./utilities/deployCommands');
|
const deployCommands = require('./utilities/deployCommands');
|
||||||
|
const { checkIn } = require("./controllers/clientController");
|
||||||
|
|
||||||
var indexRouter = require('./routes/index');
|
var indexRouter = require('./routes/index');
|
||||||
var botRouter = require('./routes/bot');
|
var botRouter = require('./routes/bot');
|
||||||
@@ -143,6 +144,9 @@ discordClient.on('ready', () => {
|
|||||||
|
|
||||||
log.DEBUG(`Starting HTTP Server`);
|
log.DEBUG(`Starting HTTP Server`);
|
||||||
runHTTPServer();
|
runHTTPServer();
|
||||||
|
|
||||||
|
log.DEBUG("Checking in with the master server")
|
||||||
|
checkIn();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Setup any additional event handlers
|
// Setup any additional event handlers
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ exports.clientConfig = {
|
|||||||
|
|
||||||
// Configuration for the connection to the server
|
// Configuration for the connection to the server
|
||||||
exports.serverConfig = {
|
exports.serverConfig = {
|
||||||
"ip": "127.0.0.1",
|
"ip": "172.16.100.108",
|
||||||
"hostname": "localhost",
|
"hostname": "localhost",
|
||||||
"port": 3000
|
"port": 3000
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// Debug
|
// Debug
|
||||||
// const { DebugBuilder } = require("../utilities/debugBuilder.js");
|
const { DebugBuilder } = require("../utilities/debugBuilder.js");
|
||||||
// const log = new DebugBuilder("client", "clientController");
|
const log = new DebugBuilder("client", "clientController");
|
||||||
// Configs
|
// Configs
|
||||||
const config = require("../config/clientConfig");
|
const config = require("../config/clientConfig");
|
||||||
const modes = require("../config/modes");
|
const modes = require("../config/modes");
|
||||||
|
// Modules
|
||||||
|
const { executeAsyncConsoleCommand } = require("../utilities/executeConsoleCommands.js");
|
||||||
// Utilities
|
// Utilities
|
||||||
const updateConfig = require("../utilities/updateConfig");
|
const updateConfig = require("../utilities/updateConfig");
|
||||||
const updatePreset = require("../utilities/updatePresets");
|
const updatePreset = require("../utilities/updatePresets");
|
||||||
@@ -29,6 +31,34 @@ function checkBodyForPresetFields(req, res, callback) {
|
|||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function checkLocalIP() {
|
||||||
|
let ipAddr;
|
||||||
|
if (process.platform === "win32") {
|
||||||
|
// Windows
|
||||||
|
var networkConfig = executeAsyncConsoleCommand("ipconfig");
|
||||||
|
log.DEBUG('Network Config: ', networkConfig);
|
||||||
|
var networkConfigLines = networkConfig.split("\n").filter(line => {
|
||||||
|
if (!line.includes(":")) return false;
|
||||||
|
|
||||||
|
line = line.split(":");
|
||||||
|
|
||||||
|
if (!line.length === 2) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}).map(line => {
|
||||||
|
line = line.split(':');
|
||||||
|
line[0] = line[0].replace(".", "");
|
||||||
|
return line;
|
||||||
|
});
|
||||||
|
log.DEBUG("Parsed IP Config Results: ", networkConfigLines);
|
||||||
|
return networkConfigLines['IPv4 Address'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Linux
|
||||||
|
var networkConfig = executeAsyncConsoleCommand("ip addr");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Check in with the server
|
/** Check in with the server
|
||||||
* If the bot has a saved ID, check in with the server to update any information or just check back in
|
* If the bot has a saved ID, check in with the server to update any information or just check back in
|
||||||
* If the bot does not have a saved ID, it will attempt to request a new ID from the server
|
* If the bot does not have a saved ID, it will attempt to request a new ID from the server
|
||||||
@@ -40,6 +70,7 @@ exports.checkIn = async () => {
|
|||||||
// ID was not found in the config, creating a new node
|
// ID was not found in the config, creating a new node
|
||||||
reqOptions = new requests.requestOptions("/nodes/newNode", "POST");
|
reqOptions = new requests.requestOptions("/nodes/newNode", "POST");
|
||||||
delete config.clientConfig.id;
|
delete config.clientConfig.id;
|
||||||
|
client.clientConfig.ip = checkLocalIP();
|
||||||
requests.sendHttpRequest(reqOptions, JSON.stringify(config.clientConfig), (responseObject) => {
|
requests.sendHttpRequest(reqOptions, JSON.stringify(config.clientConfig), (responseObject) => {
|
||||||
// Update the client's ID if the server accepted it
|
// Update the client's ID if the server accepted it
|
||||||
if (responseObject.statusCode === 202) {
|
if (responseObject.statusCode === 202) {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const execCommand = promisify(exec);
|
|||||||
async function executeAsyncConsoleCommand(consoleCommand) {
|
async function executeAsyncConsoleCommand(consoleCommand) {
|
||||||
// Check to see if the command is a real command
|
// Check to see if the command is a real command
|
||||||
// TODO needs to be improved
|
// TODO needs to be improved
|
||||||
const acceptableCommands = [ "arecord -L" ];
|
const acceptableCommands = [ "arecord -L", 'ipconfig', 'ip addr' ];
|
||||||
if (!acceptableCommands.includes(consoleCommand)) {
|
if (!acceptableCommands.includes(consoleCommand)) {
|
||||||
log.WARN("Console command is not acceptable: ", consoleCommand);
|
log.WARN("Console command is not acceptable: ", consoleCommand);
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|||||||
Reference in New Issue
Block a user