Ver código fonte

Worked on Discord logging.

KrisVos130 7 anos atrás
pai
commit
24580af635
4 arquivos alterados com 101 adições e 13 exclusões
  1. 95 11
      backend/index.js
  2. 1 1
      backend/logic/actions/playlists.js
  3. 4 1
      backend/logic/logger.js
  4. 1 0
      backend/package.json

+ 95 - 11
backend/index.js

@@ -5,6 +5,9 @@ process.env.NODE_CONFIG_DIR = `${__dirname}/config`;
 const async = require('async');
 const fs = require('fs');
 
+
+const Discord = require("discord.js");
+const client = new Discord.Client();
 const db = require('./logic/db');
 const app = require('./logic/app');
 const mail = require('./logic/mail');
@@ -19,55 +22,133 @@ const logger = require('./logic/logger');
 const tasks = require('./logic/tasks');
 const config = require('config');
 
+let currentComponent;
+
 process.on('uncaughtException', err => {
 	//console.log(`ERROR: ${err.message}`);
 	console.log(`ERROR: ${err.stack}`);
 });
 
+client.on('ready', () => {
+	discordClientCBS.forEach((cb) => {
+		cb();
+	});
+	console.log(`DISCORD Logged in as ${client.user.username}!`);
+	//this.logToDiscord("Lost connection to MongoDB. Crashing server.", "Database error", true, [{name: 'Error', value: 'MONGOERR: ERRCNNCT 127.0.0.1 FAILED TO CONNECT', inline: false}], (err) => {console.log(err);});
+});
+
+client.login(config.get('apis.discord.token'));
+
+let discordClientCBS = [];
+const getDiscordClient = (cb) => {
+	if (client.status === 0) return cb();
+	else discordClientCBS.push(cb);
+};
+
+const logToDiscord = (message, color, type, critical, extraFields, cb = ()=>{}) => {
+	getDiscordClient(() => {
+		let richEmbed = new Discord.RichEmbed();
+		richEmbed.setAuthor("Musare Logger", "https://musare.com/favicon-194x194.png", "https://musare.com");
+		richEmbed.setColor(color);
+		richEmbed.setDescription(message);
+		//richEmbed.setFooter("Footer", "https://musare.com/favicon-194x194.png");
+		//richEmbed.setImage("https://musare.com/favicon-194x194.png");
+		//richEmbed.setThumbnail("https://musare.com/favicon-194x194.png");
+		richEmbed.setTimestamp(new Date());
+		richEmbed.setTitle("MUSARE ALERT");
+		richEmbed.setURL("https://musare.com");
+		richEmbed.addField("Type:", type, true);
+		richEmbed.addField("Critical:", (critical) ? 'True' : 'False', true);
+		extraFields.forEach((extraField) => {
+			richEmbed.addField(extraField.name, extraField.value, extraField.inline);
+		});
+		/*client.channels.get(config.get('apis.discord.loggingChannel')).sendEmbed(richEmbed).then(() => {
+			cb();
+		}).then((reason) => {
+			cb(reason);
+		});*/
+	});
+};
+
 async.waterfall([
 
 	// setup our Redis cache
 	(next) => {
+		currentComponent = 'Cache';
 		cache.init(config.get('redis').url, config.get('redis').password, () => {
 			next();
 		});
 	},
 
 	// setup our MongoDB database
-	(next) => db.init(config.get("mongo").url, next),
+	(next) => {
+		currentComponent = 'DB';
+		db.init(config.get("mongo").url, next);
+	},
 
 	// setup the express server
-	(next) => app.init(next),
+	(next) => {
+		currentComponent = 'App';
+		app.init(next);
+	},
 
 	// setup the mail
-	(next) => mail.init(next),
+	(next) => {
+		currentComponent = 'Mail';
+		mail.init(next);
+	},
 
 	// setup the socket.io server (all client / server communication is done over this)
-	(next) => io.init(next),
+	(next) => {
+		currentComponent = 'IO';
+		io.init(next);
+	},
 
 	// setup the notifications
-	(next) => notifications.init(config.get('redis').url, config.get('redis').password, next),
+	(next) => {
+		currentComponent = 'Notifications';
+		notifications.init(config.get('redis').url, config.get('redis').password, next);
+	},
 
 	// setup the stations
-	(next) => stations.init(next),
+	(next) => {
+		currentComponent = 'Stations';
+		stations.init(next)
+	},
 
 	// setup the songs
-	(next) => songs.init(next),
+	(next) => {
+		currentComponent = 'Songs';
+		songs.init(next)
+	},
 
 	// setup the playlists
-	(next) => playlists.init(next),
+	(next) => {
+		currentComponent = 'Playlists';
+		playlists.init(next)
+	},
 
 	// setup the API
-	(next) => api.init(next),
+	(next) => {
+		currentComponent = 'API';
+		api.init(next)
+	},
 
 	// setup the logger
-	(next) => logger.init(next),
+	(next) => {
+		currentComponent = 'Logger';
+		logger.init(next)
+	},
 
 	// setup the tasks system
-	(next) => tasks.init(next),
+	(next) => {
+		currentComponent = 'Tasks';
+		tasks.init(next)
+	},
 
 	// setup the frontend for local setups
 	(next) => {
+		currentComponent = 'Windows';
 		if (!config.get("isDocker")) {
 			const express = require('express');
 			const app = express();
@@ -89,10 +170,13 @@ async.waterfall([
 	}
 ], (err) => {
 	if (err && err !== true) {
+		logToDiscord("An error occurred while initializing the backend server.", "#FF0000", "Startup error", true, [{name: "Error:", value: err, inline: false}, {name: "Component:", value: currentComponent, inline: true}])
 		console.error('An error occurred while initializing the backend server');
 		console.error(err);
+
 		process.exit();
 	} else {
+		logToDiscord("The backend server started successfully.", "#00AA00", "Startup", false);
 		console.info('Backend server has been successfully started');
 	}
 });

+ 1 - 1
backend/logic/actions/playlists.js

@@ -375,7 +375,7 @@ let lib = {
 				return cb({ status: 'failure', message: err});
 			} else {
 				logger.success("PLAYLIST_REMOVE_SONG", `Successfully removed song "${songId}" from private playlist "${playlistId}" for user "${userId}".`);
-				cache.pub('playlist.removeSong', { playlistId: playlist._id, songId: songId, userId });\
+				cache.pub('playlist.removeSong', { playlistId: playlist._id, songId: songId, userId });
 				return cb({ status: 'success', message: 'Song has been successfully removed from playlist', data: playlist.songs });
 			}
 		});

+ 4 - 1
backend/logic/logger.js

@@ -3,6 +3,8 @@
 const dir = `${__dirname}/../../log`;
 const fs = require('fs');
 const config = require('config');
+const Discord = require("discord.js");
+let client;
 let utils;
 
 if (!config.isDocker && !fs.existsSync(`${dir}`)) {
@@ -102,8 +104,9 @@ module.exports = {
 		fs.appendFile(dir + '/error.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
 		fs.appendFile(dir + '/info.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
 		fs.appendFile(dir + '/debugStation.log', `${time} BACKEND_RESTARTED\n`, ()=>{});
+		cb("MAJOR FAILURE!");
 
-		cb();
+		//cb();
 	},
 	success: (type, message, display = true) => {
 		success++;

+ 1 - 0
backend/package.json

@@ -18,6 +18,7 @@
     "connect-mongo": "^1.3.2",
     "cookie-parser": "^1.4.3",
     "cors": "^2.8.1",
+    "discord.js": "^11.0.0",
     "express": "^4.14.0",
     "express-session": "^1.14.0",
     "mailgun-js": "^0.8.0",