diff --git a/README.md b/README.md index 8a1e3aa4..7c434dd0 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ Configuration takes place in the environment variables that are defined in ecosy | RECAPTCHA_SITEKEY | reCaptcha site key | "23ksdfssd" | | RECAPTCHA_TIME | time in minutes between captchas | 30 | | SESSION_SECRET | random sting for expression sessions | "ayylmao" | +| LOG_MYSQL | if sql queries should get logged | 0 | Notes: diff --git a/ecosystem.yml b/ecosystem.yml index 37988f5c..aa67bca6 100644 --- a/ecosystem.yml +++ b/ecosystem.yml @@ -10,5 +10,6 @@ apps: MYSQL_HOST: "localhost" MYSQL_USER: "pixelplanet" MYSQL_DATABASE: "pixelplanet" + LOG_MYSQL: 1 MYSQL_PW: "sqlpassword" SESSION_SECRET: "ayyylmao" diff --git a/package-lock.json b/package-lock.json index 7aaa7812..cf4209c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1654,6 +1654,11 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -2778,6 +2783,15 @@ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", "dev": true }, + "cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", + "requires": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -3659,6 +3673,11 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, "depcheck": { "version": "0.6.11", "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-0.6.11.tgz", @@ -4799,8 +4818,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.0.1", @@ -6060,6 +6078,14 @@ "globule": "^1.0.0" } }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -6993,6 +7019,11 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", @@ -7427,6 +7458,11 @@ "triple-beam": "^1.3.0" } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7875,6 +7911,48 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "mysql2": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.1.0.tgz", + "integrity": "sha512-9kGVyi930rG2KaHrz3sHwtc6K+GY9d8wWk1XRSYxQiunvGcn4DwuZxOwmK11ftuhhwrYDwGx9Ta4VBwznJn36A==", + "requires": { + "cardinal": "^2.1.1", + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.5.0", + "long": "^4.0.0", + "lru-cache": "^5.1.1", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + } + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + } + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -9614,6 +9692,14 @@ "strip-indent": "^1.0.1" } }, + "redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", + "requires": { + "esprima": "~4.0.0" + } + }, "redis": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", @@ -10107,6 +10193,11 @@ "mailcomposer": "3.12.0" } }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, "sequelize": { "version": "5.21.3", "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.3.tgz", @@ -10605,6 +10696,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", diff --git a/package.json b/package.json index 76a54480..5d7055e6 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "localforage": "^1.5.0", "morgan": "^1.8.2", "multer": "^1.4.1", + "mysql2": "^2.1.0", "node-sass": "^4.11.0", "passport": "^0.4.0", "passport-discord": "^0.1.2", diff --git a/src/core/config.js b/src/core/config.js index 7539317b..753aab7e 100644 --- a/src/core/config.js +++ b/src/core/config.js @@ -29,6 +29,9 @@ export const MYSQL_PW = process.env.MYSQL_PW || 'password'; // Social export const DISCORD_INVITE = process.env.DISCORD_INVITE || 'https://discordapp.com/'; +// Logging +export const LOG_MYSQL = parseInt(process.env.LOG_MYSQL, 10) || false; + // Accounts export const APISOCKET_KEY = process.env.APISOCKET_KEY || 'changethis'; // Comma seperated list of user ids of Admins diff --git a/src/core/logger.js b/src/core/logger.js index 7e0a72df..3587ae48 100644 --- a/src/core/logger.js +++ b/src/core/logger.js @@ -5,18 +5,25 @@ * @flow */ -import winston from 'winston'; +import { createLogger, format, transports } from 'winston'; -const logger = winston; - -export const proxyLogger = winston.createLogger({ +const logger = createLogger({ + level: 'info', + format: format.combine( + format.simple(), + ), transports: [ - new winston.transports.File({ + new transports.Console(), + ], +}); + +export const proxyLogger = createLogger({ + transports: [ + new transports.File({ level: 'info', - filename: '/var/log/pixelplace/proxies.log', - json: true, - maxsize: 2 * 52428800, // 100MB + filename: './proxies.log', + maxsize: 10428800, // 10MB colorize: false, }), ], diff --git a/src/data/sequelize.js b/src/data/sequelize.js index 893b2e5d..05108059 100644 --- a/src/data/sequelize.js +++ b/src/data/sequelize.js @@ -5,9 +5,9 @@ import Sequelize from 'sequelize'; -import logging from '../core/logger'; +import logger from '../core/logger'; import { - MYSQL_HOST, MYSQL_DATABASE, MYSQL_USER, MYSQL_PW, + MYSQL_HOST, MYSQL_DATABASE, MYSQL_USER, MYSQL_PW, LOG_MYSQL, } from '../core/config'; const sequelize = new Sequelize(MYSQL_DATABASE, MYSQL_USER, MYSQL_PW, { @@ -18,8 +18,8 @@ const sequelize = new Sequelize(MYSQL_DATABASE, MYSQL_USER, MYSQL_PW, { max: 25, idle: 10000, acquire: 10000, - logging, }, + logging: (LOG_MYSQL) ? (...msg) => logger.info(msg) : false, dialectOptions: { connectTimeout: 10000, multipleStatements: true, diff --git a/src/socket/SocketServer.js b/src/socket/SocketServer.js index bb6538ac..812fb673 100644 --- a/src/socket/SocketServer.js +++ b/src/socket/SocketServer.js @@ -35,7 +35,7 @@ async function verifyClient(info, done) { // Limiting socket connections per ip const ip = await getIPFromRequest(req); - logger.info(`Got ws request from ${ip}`); + logger.info('Got ws request from', ip); if (ipCounter.get(ip) > 50) { logger.info(`Client ${ip} has more than 50 connections open.`); return done(false);