From 6f0afe52b26e9c4365e7ff915dd740fb5b748216 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 31 Dec 2023 10:41:22 +0530 Subject: [PATCH 1/2] Winston added! --- app-error.log | 0 app-info.log | 0 package-lock.json | 333 +++++++++++++++++- package.json | 1 + server/config/passport.js | 5 +- server/controllers/aws.controller.js | 5 +- server/controllers/file.controller.js | 5 +- server/controllers/project.controller.js | 9 +- .../project.controller/createProject.js | 3 +- server/controllers/user.controller.js | 3 +- server/logger/dev-logger.js | 18 + server/logger/prod-logger.js | 32 ++ server/logger/winton.js | 14 + server/migrations/db_reformat.js | 21 +- server/migrations/emailConsolidation.js | 33 +- server/migrations/moveBucket.js | 67 ++-- server/migrations/populateTotalSize.js | 9 +- server/migrations/s3UnderUser.js | 55 +-- server/migrations/truncate.js | 9 +- server/previewServer.js | 3 +- server/scripts/examples-ml5.js | 23 +- server/scripts/examples.js | 15 +- server/scripts/update-syntax-highlighting.js | 5 +- server/server.js | 3 +- 24 files changed, 537 insertions(+), 134 deletions(-) create mode 100644 app-error.log create mode 100644 app-info.log create mode 100644 server/logger/dev-logger.js create mode 100644 server/logger/prod-logger.js create mode 100644 server/logger/winton.js diff --git a/app-error.log b/app-error.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app-info.log b/app-info.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package-lock.json b/package-lock.json index c30dc5c95a..1ad044e40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -111,6 +111,7 @@ "uuid": "^8.3.2", "webpack": "^5.76.0", "webpack-dev-middleware": "^5.3.1", + "winston": "^3.11.0", "xhr": "^2.6.0" }, "devDependencies": { @@ -2976,6 +2977,16 @@ "node": ">=4.0.0" } }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -16038,6 +16049,11 @@ "@types/node": "*" } }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", @@ -19168,6 +19184,15 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -21759,6 +21784,11 @@ "react": ">=16.3.0" } }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -23900,6 +23930,11 @@ "pend": "~1.2.0" } }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "node_modules/fetch-blob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", @@ -24193,6 +24228,11 @@ "node": ">=0.4.0" } }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "node_modules/follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", @@ -26369,7 +26409,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -32065,6 +32104,11 @@ "node": ">= 8" } }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "node_modules/ky": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", @@ -32725,6 +32769,30 @@ "node": ">=8" } }, + "node_modules/logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/lolex": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", @@ -34197,8 +34265,7 @@ "node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "node_modules/msw": { "version": "0.35.0", @@ -35357,6 +35424,14 @@ "wrappy": "1" } }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -39341,6 +39416,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -40102,6 +40185,14 @@ "stackframe": "^1.1.1" } }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, "node_modules/stackframe": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", @@ -41139,6 +41230,11 @@ "node": ">=8" } }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -41248,6 +41344,14 @@ "node": ">=8" } }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", @@ -42615,6 +42719,74 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, + "node_modules/winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -44817,6 +44989,16 @@ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "dev": true }, + "@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "requires": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, "@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -54421,6 +54603,11 @@ "@types/node": "*" } }, + "@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, "@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", @@ -56802,6 +56989,15 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "requires": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -58687,6 +58883,11 @@ "hoist-non-react-statics": "^3.3.0" } }, + "enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -60291,6 +60492,11 @@ "pend": "~1.2.0" } }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "fetch-blob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", @@ -60514,6 +60720,11 @@ "integrity": "sha512-45eNySEs7n692jLN+eHQ6zvC9e1cqu9Dq1PpDHTcWRri2HFEs8is8Anmp1RcIhYxA5TZYD6RuESG2jdj6nkDJQ==", "dev": true }, + "fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, "follow-redirects": { "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", @@ -62109,8 +62320,7 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.6", @@ -66542,6 +66752,11 @@ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, + "kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, "ky": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", @@ -67044,6 +67259,26 @@ } } }, + "logform": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "requires": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + } + } + }, "lolex": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", @@ -68235,8 +68470,7 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "msw": { "version": "0.35.0", @@ -69124,6 +69358,14 @@ "wrappy": "1" } }, + "one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "requires": { + "fn.name": "1.x.x" + } + }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -72154,6 +72396,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -72762,6 +73009,11 @@ "stackframe": "^1.1.1" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, "stackframe": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", @@ -73567,6 +73819,11 @@ "minimatch": "^3.0.4" } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -73661,6 +73918,11 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, + "triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + }, "trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", @@ -74669,6 +74931,63 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, + "winston": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "requires": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.5.0" + }, + "dependencies": { + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", + "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 4c9914c727..ada5e19375 100644 --- a/package.json +++ b/package.json @@ -255,6 +255,7 @@ "uuid": "^8.3.2", "webpack": "^5.76.0", "webpack-dev-middleware": "^5.3.1", + "winston": "^3.11.0", "xhr": "^2.6.0" } } diff --git a/server/config/passport.js b/server/config/passport.js index a6cbc5a508..53a4761576 100644 --- a/server/config/passport.js +++ b/server/config/passport.js @@ -9,6 +9,7 @@ import GoogleStrategy from 'passport-google-oauth20'; import { BasicStrategy } from 'passport-http'; import User from '../models/user'; +import logger from '../logger/winton'; const accountSuspensionMessage = 'Account has been suspended. Please contact privacy@p5js.org if you believe this is an error.'; @@ -274,7 +275,7 @@ passport.use( User.EmailConfirmation.Verified; existingEmailUser.save((saveErr) => { if (saveErr) { - console.log(saveErr); + logger.debug(saveErr); } done(null, existingEmailUser); }); @@ -288,7 +289,7 @@ passport.use( user.verified = User.EmailConfirmation.Verified; user.save((saveErr) => { if (saveErr) { - console.log(saveErr); + logger.debug(saveErr); } done(null, user); }); diff --git a/server/controllers/aws.controller.js b/server/controllers/aws.controller.js index 91d3d487be..3420ac8009 100644 --- a/server/controllers/aws.controller.js +++ b/server/controllers/aws.controller.js @@ -4,6 +4,7 @@ import s3 from '@auth0/s3'; import mongoose from 'mongoose'; import { getProjectsForUserId } from './project.controller'; import { findUserByUsername } from './user.controller'; +import logger from '../logger/winton'; const { ObjectId } = mongoose.Types; @@ -230,8 +231,8 @@ export function listObjectsInS3ForUser(userId) { return Promise.resolve({ assets: projectAssets, totalSize }); }) .catch((err) => { - console.log('got an error'); - console.log(err); + logger.debug('got an error'); + logger.debug(err); }); } diff --git a/server/controllers/file.controller.js b/server/controllers/file.controller.js index 5b29156daa..b8950f3f10 100644 --- a/server/controllers/file.controller.js +++ b/server/controllers/file.controller.js @@ -4,6 +4,7 @@ import isBefore from 'date-fns/isBefore'; import Project from '../models/project'; import { resolvePathToFile } from '../utils/filePath'; import { deleteObjectsFromS3, getObjectKey } from './aws.controller'; +import logger from '../logger/winton'; // Bug -> timestamps don't get created, but it seems like this will // be fixed in mongoose soon @@ -24,7 +25,7 @@ export function createFile(req, res) { }, (err, updatedProject) => { if (err || !updatedProject) { - console.log(err); + logger.error(err); res.status(403).send({ success: false, message: 'Project does not exist, or user does not match owner.' @@ -35,7 +36,7 @@ export function createFile(req, res) { updatedProject.files.id(req.body.parentId).children.push(newFile.id); updatedProject.save((innerErr, savedProject) => { if (innerErr) { - console.log(innerErr); + logger.error(innerErr); res.json({ success: false }); return; } diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js index fd48b7558d..4c975104c3 100644 --- a/server/controllers/project.controller.js +++ b/server/controllers/project.controller.js @@ -9,6 +9,7 @@ import Project from '../models/project'; import User from '../models/user'; import { resolvePathToFile } from '../utils/filePath'; import generateFileSystemSafeName from '../utils/generateFileSystemSafeName'; +import logger from '../logger/winton'; export { default as createProject, @@ -52,7 +53,7 @@ export function updateProject(req, res) { .populate('user', 'username') .exec((updateProjectErr, updatedProject) => { if (updateProjectErr) { - console.log(updateProjectErr); + logger.error(updateProjectErr); res.status(400).json({ success: false }); return; } @@ -70,7 +71,7 @@ export function updateProject(req, res) { }); updatedProject.save((innerErr, savedProject) => { if (innerErr) { - console.log(innerErr); + logger.error(innerErr); res.status(400).json({ success: false }); return; } @@ -98,7 +99,7 @@ export function getProject(req, res) { .populate('user', 'username') .exec((err, project) => { // eslint-disable-line if (err) { - console.log(err); + logger.error(err); return res .status(404) .send({ message: 'Project with that id does not exist' }); @@ -115,7 +116,7 @@ export function getProjectsForUserId(userId) { .select('name files id createdAt updatedAt') .exec((err, projects) => { if (err) { - console.log(err); + logger.error(err); } resolve(projects); }); diff --git a/server/controllers/project.controller/createProject.js b/server/controllers/project.controller/createProject.js index 9141dec497..db805853d9 100644 --- a/server/controllers/project.controller/createProject.js +++ b/server/controllers/project.controller/createProject.js @@ -4,6 +4,7 @@ import { FileValidationError, ProjectValidationError } from '../../domain-objects/Project'; +import logger from '../../logger/winton'; export default function createProject(req, res) { let projectValues = { @@ -59,7 +60,7 @@ export function apiCreateProject(req, res) { function checkUserHasPermission() { if (req.user.username !== req.params.username) { - console.log('no permission'); + logger.error('no permission'); const error = new ProjectValidationError( `'${req.user.username}' does not have permission to create for '${req.params.username}'` ); diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js index bc3e179662..e46d2b5d15 100644 --- a/server/controllers/user.controller.js +++ b/server/controllers/user.controller.js @@ -4,6 +4,7 @@ import async from 'async'; import User from '../models/user'; import mail from '../utils/mail'; import { renderEmailConfirmation, renderResetPassword } from '../views/mail'; +import logger from '../logger/winton'; export * from './user.controller/apiKey'; @@ -181,7 +182,7 @@ export function resetPasswordInitiate(req, res) { ], (err) => { if (err) { - console.log(err); + logger.error(err); res.json({ success: false }); return; } diff --git a/server/logger/dev-logger.js b/server/logger/dev-logger.js new file mode 100644 index 0000000000..f3dffe39ea --- /dev/null +++ b/server/logger/dev-logger.js @@ -0,0 +1,18 @@ +import winston from 'winston'; + +const { combine, timestamp, printf, colorize, align } = winston.format; + +// eslint-disable-next-line import/prefer-default-export +export const developmentLogger = () => { + const logger = winston.createLogger({ + level: 'debug', + format: combine( + timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + align(), + colorize({ all: true }), + printf((info) => `[${info.timestamp}] ${info.level}: ${info.message}`) + ), + transports: [new winston.transports.Console()] + }); + return logger; +}; diff --git a/server/logger/prod-logger.js b/server/logger/prod-logger.js new file mode 100644 index 0000000000..f3c7615b02 --- /dev/null +++ b/server/logger/prod-logger.js @@ -0,0 +1,32 @@ +import winston from 'winston'; + +const { combine, timestamp, json } = winston.format; + +const errorFilter = winston.format((info, opts) => + info.level === 'error' ? info : false +); + +const infoFilter = winston.format((info, opts) => + info.level === 'info' ? info : false +); + +// eslint-disable-next-line import/prefer-default-export +export const productionLogger = () => { + const logger = winston.createLogger({ + level: 'info', + format: combine(timestamp(), json()), + transports: [ + new winston.transports.File({ + filename: 'app-error.log', + level: 'error', + format: combine(errorFilter(), timestamp(), json()) + }), + new winston.transports.File({ + filename: 'app-info.log', + level: 'info', + format: combine(infoFilter(), timestamp(), json()) + }) + ] + }); + return logger; +}; diff --git a/server/logger/winton.js b/server/logger/winton.js new file mode 100644 index 0000000000..997c70ac42 --- /dev/null +++ b/server/logger/winton.js @@ -0,0 +1,14 @@ +import { developmentLogger } from './dev-logger'; +import { productionLogger } from './prod-logger'; + +// eslint-disable-next-line import/no-mutable-exports +let logger = null; + +if (process.env.NODE_ENV !== 'production') { + logger = developmentLogger(); +} +if (process.env.NODE_ENV === 'development') { + logger = productionLogger(); +} + +export default logger; diff --git a/server/migrations/db_reformat.js b/server/migrations/db_reformat.js index 50284c1f74..a52b53c78a 100644 --- a/server/migrations/db_reformat.js +++ b/server/migrations/db_reformat.js @@ -2,7 +2,7 @@ import mongoose from 'mongoose'; import path from 'path'; import { uniqWith, isEqual } from 'lodash'; -require('dotenv').config({path: path.resolve('.env')}); +require('dotenv').config({ path: path.resolve('.env') }); const ObjectId = mongoose.Types.ObjectId; mongoose.connect('mongodb://localhost:27017/p5js-web-editor'); mongoose.connection.on('error', () => { @@ -14,6 +14,7 @@ import Project from '../models/project'; import User from '../models/user'; import s3 from '@auth0/s3'; +import logger from '../logger/winton'; let client = s3.createClient({ maxAsyncS3: 20, @@ -39,15 +40,15 @@ Project.find({}) } }); }); - console.log(s3Files.length); + logger.debug(s3Files.length); s3Files = uniqWith(s3Files, isEqual); - console.log(s3Files.length); + logger.debug(s3Files.length); }); const uploadedFiles = []; -const params = {'s3Params': {'Bucket': `${process.env.S3_BUCKET}`}}; +const params = { 's3Params': { 'Bucket': `${process.env.S3_BUCKET}` } }; let objectsResponse = client.listObjects(params); -objectsResponse.on('data', function(objects) { +objectsResponse.on('data', function (objects) { objects.Contents.forEach(object => { uploadedFiles.push(object.Key); }); @@ -55,11 +56,11 @@ objectsResponse.on('data', function(objects) { const filesToDelete = []; objectsResponse.on('end', () => { - console.log(uploadedFiles.length); + logger.debug(uploadedFiles.length); uploadedFiles.forEach(fileKey => { if (s3Files.indexOf(fileKey) === -1) { //delete file - filesToDelete.push({Key: fileKey}); + filesToDelete.push({ Key: fileKey }); // console.log("would delete file: ", fileKey); } }); @@ -76,9 +77,9 @@ objectsResponse.on('end', () => { // del.on('end', () => { // console.log('deleted extra S3 files!'); // }); - console.log("To delete: ", filesToDelete.length); - console.log("Total S3 files: ", uploadedFiles.length); - console.log("Total S3 files in mongo: ", s3Files.length); + logger.debug("To delete: ", filesToDelete.length); + logger.debug("Total S3 files: ", uploadedFiles.length); + logger.debug("Total S3 files in mongo: ", s3Files.length); }); // let projectsNotToUpdate; diff --git a/server/migrations/emailConsolidation.js b/server/migrations/emailConsolidation.js index cdd936d0c1..cc562ea9f7 100644 --- a/server/migrations/emailConsolidation.js +++ b/server/migrations/emailConsolidation.js @@ -9,6 +9,7 @@ import { } from '../controllers/aws.controller'; import mail from '../utils/mail'; import { renderAccountConsolidation } from '../views/mail'; +import logger from '../logger/winton'; const mongoConnectionString = process.env.MONGO_URL; const { ObjectId } = mongoose.Types; @@ -87,9 +88,9 @@ let duplicates = null; fs.readFile('duplicates.json', async (err, file) => { const result = JSON.parse(file); for (let i = 3000; i < result.length; i += 1) { - console.log('Index: ', i); + logger.debug('Index: ', i); const email = result[i]._id; - console.log(email); + logger.debug(email); await consolidateAccount(email); // eslint-disable-line } process.exit(0); @@ -102,9 +103,9 @@ async function consolidateAccount(email) { .exec() .then((result) => { [currentUser, ...duplicates] = result; - console.log('Current User: ', currentUser._id, ' ', currentUser.email); + logger.debug('Current User: ', currentUser._id, ' ', currentUser.email); duplicates = duplicates.map((dup) => dup._id); - console.log('Duplicates: ', duplicates); + logger.debug('Duplicates: ', duplicates); return Project.find({ user: { $in: duplicates } }).exec(); @@ -112,8 +113,8 @@ async function consolidateAccount(email) { .then((sketches) => { const saveSketchPromises = []; sketches.forEach((sketch) => { - console.log('SketchId: ', sketch._id); - console.log('UserId: ', sketch.user); + logger.debug('SketchId: ', sketch._id); + logger.debug('UserId: ', sketch.user); const moveSketchFilesPromises = []; sketch.files.forEach((file) => { // if the file url contains sketch user @@ -131,8 +132,8 @@ async function consolidateAccount(email) { file.url = newUrl; }) .catch((err) => { - console.log('Move Error:'); - console.log(err); + logger.error('Move Error:'); + logger.error(err); }); moveSketchFilesPromises.push(fileSavePromise); } else { @@ -141,8 +142,8 @@ async function consolidateAccount(email) { file.url = newUrl; }) .catch((err) => { - console.log('Copy Error:'); - console.log(err); + logger.error('Copy Error:'); + logger.error(err); }); moveSketchFilesPromises.push(fileSavePromise); } @@ -159,23 +160,23 @@ async function consolidateAccount(email) { return Promise.all(saveSketchPromises); }) .then(() => { - console.log('Moved and updated all sketches.'); + logger.debug('Moved and updated all sketches.'); return Collection.updateMany( { owner: { $in: duplicates } }, { $set: { owner: ObjectId(currentUser.id) } } ); }) .then(() => { - console.log('Moved and updated all collections.'); + logger.debug('Moved and updated all collections.'); return User.deleteMany({ _id: { $in: duplicates } }); }) .then(() => { - console.log('Deleted other user accounts.'); + logger.debug('Deleted other user accounts.'); currentUser.email = currentUser.email.toLowerCase(); return currentUser.save(); }) .then(() => { - console.log('Migrated email to lowercase.'); + logger.debug('Migrated email to lowercase.'); // const protocol = process.env.NODE_ENV === 'production' ? 'https' : 'http'; const mailOptions = renderAccountConsolidation({ body: { @@ -188,7 +189,7 @@ async function consolidateAccount(email) { return new Promise((resolve, reject) => { mail.send(mailOptions, (mailErr, result) => { - console.log('Sent email.'); + logger.debug('Sent email.'); if (mailErr) { return reject(mailErr); } @@ -197,7 +198,7 @@ async function consolidateAccount(email) { }); }) .catch((err) => { - console.log(err); + logger.error(err); process.exit(1); }); } diff --git a/server/migrations/moveBucket.js b/server/migrations/moveBucket.js index fa833e3845..56b4773a81 100644 --- a/server/migrations/moveBucket.js +++ b/server/migrations/moveBucket.js @@ -5,7 +5,8 @@ import mongoose from 'mongoose'; import User from '../models/user'; import Project from '../models/project'; import async from 'async'; -require('dotenv').config({path: path.resolve('.env')}); +import logger from '../logger/winton'; +require('dotenv').config({ path: path.resolve('.env') }); mongoose.connect('mongodb://localhost:27017/p5js-web-editor'); mongoose.connection.on('error', () => { console.error('MongoDB Connection Error. Please make sure that MongoDB is running.'); @@ -27,39 +28,39 @@ mongoose.connection.on('error', () => { const CHUNK = 100; Project.count({}) -.exec().then((numProjects) => { - console.log(numProjects); - let index = 0; - async.whilst( - () => { - return index < numProjects; - }, - (whilstCb) => { - Project.find({}).skip(index).limit(CHUNK).exec((err, projects) => { - async.eachSeries(projects, (project, cb) => { - console.log(project.name); - async.eachSeries(project.files, (file, fileCb) => { - if (file.url && file.url.includes('s3-us-west-2.amazonaws.com/')) { - file.url = file.url.replace('s3-us-west-2.amazonaws.com/', ''); - project.save((err, newProject) => { - console.log(`updated file ${file.url}`); + .exec().then((numProjects) => { + logger.debug(numProjects); + let index = 0; + async.whilst( + () => { + return index < numProjects; + }, + (whilstCb) => { + Project.find({}).skip(index).limit(CHUNK).exec((err, projects) => { + async.eachSeries(projects, (project, cb) => { + logger.debug(project.name); + async.eachSeries(project.files, (file, fileCb) => { + if (file.url && file.url.includes('s3-us-west-2.amazonaws.com/')) { + file.url = file.url.replace('s3-us-west-2.amazonaws.com/', ''); + project.save((err, newProject) => { + logger.debug(`updated file ${file.url}`); + fileCb(); + }); + } else { fileCb(); - }); - } else { - fileCb(); - } + } + }, () => { + cb(); + }); }, () => { - cb(); + index += CHUNK; + whilstCb(); }); - }, () => { - index += CHUNK; - whilstCb(); }); - }); - }, - () => { - console.log('finished processing all documents.') - process.exit(0); - } - ); -}); + }, + () => { + logger.debug('finished processing all documents.') + process.exit(0); + } + ); + }); diff --git a/server/migrations/populateTotalSize.js b/server/migrations/populateTotalSize.js index 19e9f62345..af7d0eb80c 100644 --- a/server/migrations/populateTotalSize.js +++ b/server/migrations/populateTotalSize.js @@ -3,6 +3,7 @@ import mongoose from 'mongoose'; import User from '../models/user'; import { listObjectsInS3ForUser } from '../controllers/aws.controller'; +import logger from '../logger/winton'; // Connect to MongoDB mongoose.Promise = global.Promise; @@ -13,17 +14,17 @@ mongoose.connection.on('error', () => { }); User.find({}, {}, { timeout: true }).cursor().eachAsync((user) => { - console.log(user.id); + logger.debug(user.id); if (user.totalSize !== undefined) { - console.log('Already updated size for user: ' + user.username); + logger.debug('Already updated size for user: ' + user.username); return Promise.resolve(); } return listObjectsInS3ForUser(user.id).then((objects) => { return User.findByIdAndUpdate(user.id, { $set: { totalSize: objects.totalSize } }); }).then(() => { - console.log('Updated new total size for user: ' + user.username); + logger.debug('Updated new total size for user: ' + user.username); }); }).then(() => { - console.log('Done iterating over every user'); + logger.debug('Done iterating over every user'); process.exit(0); }); \ No newline at end of file diff --git a/server/migrations/s3UnderUser.js b/server/migrations/s3UnderUser.js index 33500f75de..c4a4b663ab 100644 --- a/server/migrations/s3UnderUser.js +++ b/server/migrations/s3UnderUser.js @@ -5,7 +5,8 @@ import mongoose from 'mongoose'; import User from '../models/user'; import Project from '../models/project'; import async from 'async'; -require('dotenv').config({path: path.resolve('.env')}); +import logger from '../logger/winton'; +require('dotenv').config({ path: path.resolve('.env') }); mongoose.connect('mongodb://localhost:27017/p5js-web-editor'); mongoose.connection.on('error', () => { console.error('MongoDB Connection Error. Please make sure that MongoDB is running.'); @@ -27,7 +28,7 @@ let client = s3.createClient({ const CHUNK = 100; Project.count({}).exec().then((numProjects) => { - console.log(numProjects); + logger.debug(numProjects); let index = 0; async.whilst( () => { @@ -41,13 +42,13 @@ Project.count({}).exec().then((numProjects) => { return; } const userId = project.user.valueOf(); - console.log(project.name); + logger.debug(project.name); async.eachSeries(project.files, (file, fileCb) => { if (file.url && file.url.includes(process.env.S3_BUCKET) && !file.url.includes(userId)) { - console.log(file.url); - console.log(userId); + logger.debug(file.url); + logger.debug(userId); const key = file.url.split('/').pop(); - console.log(key); + logger.debug(key); const params = { Bucket: `${process.env.S3_BUCKET}`, CopySource: `${process.env.S3_BUCKET}/${key}`, @@ -55,33 +56,33 @@ Project.count({}).exec().then((numProjects) => { }; try { client.moveObject(params) - .on('error', (err) => { - console.log(err); - file.url = (process.env.S3_BUCKET_URL_BASE || - `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`; - project.save((err, savedProject) => { - console.log(`updated file ${key}`); - fileCb(); + .on('error', (err) => { + logger.error(err); + file.url = (process.env.S3_BUCKET_URL_BASE || + `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`; + project.save((err, savedProject) => { + console.log(`updated file ${key}`); + fileCb(); + }); + }) + .on('end', () => { + file.url = (process.env.S3_BUCKET_URL_BASE || + `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`; + project.save((err, savedProject) => { + logger.debug(`updated file ${key}`); + fileCb(); + }); }); - }) - .on('end', () => { - file.url = (process.env.S3_BUCKET_URL_BASE || - `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`; - project.save((err, savedProject) => { - console.log(`updated file ${key}`); - fileCb(); - }); - }); - } catch(e) { - console.log(e); + } catch (e) { + logger.error(e); fileCb(); } } else { fileCb(); - } + } }, () => { cb(); - }); + }); }, () => { index += CHUNK; whilstCb(); @@ -89,7 +90,7 @@ Project.count({}).exec().then((numProjects) => { }); }, () => { - console.log('finished processing all documents.'); + logger.debug('finished processing all documents.'); process.exit(0); } ); diff --git a/server/migrations/truncate.js b/server/migrations/truncate.js index f26e7bc495..d6f8c19e53 100644 --- a/server/migrations/truncate.js +++ b/server/migrations/truncate.js @@ -6,6 +6,7 @@ const dotenv = require('dotenv'); dotenv.config(); import Project from '../models/project'; +import logger from '../logger/winton'; // Connect to MongoDB mongoose.Promise = global.Promise; @@ -20,17 +21,17 @@ mongoose.connection.on('error', () => { Project.find({}, {}, { timeout: true }).cursor().eachAsync((project) => { - console.log(project.name); + logger.debug(project.name); if (project.name.length < 256) { - console.log('Project name is okay.'); + logger.debug('Project name is okay.'); return Promise.resolve(); } project.name = project.name.substr(0, 255); project.slug = slugify(project.name, '_'); return project.save().then(() => { - console.log('Updated sketch slug to: ' + project.slug); + logger.debug('Updated sketch slug to: ' + project.slug); }); }).then(() => { - console.log('Done iterating over every sketch.'); + logger.debug('Done iterating over every sketch.'); process.exit(0); }); \ No newline at end of file diff --git a/server/previewServer.js b/server/previewServer.js index ea8d03d657..0272230bfc 100644 --- a/server/previewServer.js +++ b/server/previewServer.js @@ -5,6 +5,7 @@ import webpack from 'webpack'; import cors from 'cors'; import webpackDevMiddleware from 'webpack-dev-middleware'; import webpackHotMiddleware from '@gatsbyjs/webpack-hot-middleware'; +import logger from './logger/winton'; import config from '../webpack/config.dev'; import embedRoutes from './routes/embed.routes'; import assetRoutes from './routes/asset.routes'; @@ -83,7 +84,7 @@ app.get('*', (req, res) => { app.listen(process.env.PREVIEW_PORT, (error) => { if (!error) { - console.log( + logger.debug( `p5.js Preview Server is running on port: ${process.env.PREVIEW_PORT}` ); } diff --git a/server/scripts/examples-ml5.js b/server/scripts/examples-ml5.js index 0473170aa2..2eada93892 100644 --- a/server/scripts/examples-ml5.js +++ b/server/scripts/examples-ml5.js @@ -2,6 +2,7 @@ import fs from 'fs'; import axios from 'axios'; import Q from 'q'; import { ok } from 'assert'; +import logger from '../logger/winton'; const branchName = 'main'; const branchRef = `?ref=${branchName}`; @@ -311,31 +312,31 @@ async function createProject(project) { * @param {*} user */ async function createProjectsInP5User(filledProjectList, user) { - console.log('Finding existing projects...'); + logger.debug('Finding existing projects...'); const existingProjects = await getProjectsList(); - console.log(`Will delete ${existingProjects.length} projects`); + logger.debug(`Will delete ${existingProjects.length} projects`); try { await Q.all(existingProjects.map(deleteProject)); - console.log('deleted old projects!'); + logger.debug('deleted old projects!'); } catch (error) { - console.log('Problem deleting projects'); - console.log(error); + logger.error('Problem deleting projects'); + logger.error(error); process.exit(1); } try { const newProjects = filledProjectList.map(async (project) => { - console.log(`saving ${project.name}`); + logger.debug(`saving ${project.name}`); await createProject(project); }); await Q.all(newProjects); - console.log(`Projects saved to User: ${editorUsername}!`); + logger.debug(`Projects saved to User: ${editorUsername}!`); } catch (error) { - console.log('Error saving projects'); - console.log(error); + logger.error('Error saving projects'); + logger.error(error); } } @@ -366,7 +367,7 @@ async function make() { ); await createProjectsInP5User(formattedSketchList); - console.log('done!'); + logger.debug('done!'); process.exit(); } @@ -390,7 +391,7 @@ async function test() { ); await createProjectsInP5User(formattedSketchList); - console.log('done!'); + logger.debug('done!'); process.exit(); } diff --git a/server/scripts/examples.js b/server/scripts/examples.js index 46ec09d91f..1643748c2e 100644 --- a/server/scripts/examples.js +++ b/server/scripts/examples.js @@ -6,6 +6,7 @@ import shortid from 'shortid'; import { defaultCSS, defaultHTML } from '../domain-objects/createDefaultFiles'; import User from '../models/user'; import Project from '../models/project'; +import logger from '../logger/winton'; const clientId = process.env.GITHUB_ID; const clientSecret = process.env.GITHUB_SECRET; @@ -198,7 +199,7 @@ async function addAssetsToProject(assets, response, project) { children: [], fileType: 'file' }); - console.log(`create assets: ${assetName}`); + logger.debug(`create assets: ${assetName}`); // add asset file inside the newly created assets folder at index 4 project.files[4].children.push(fileID); } else { @@ -211,7 +212,7 @@ async function addAssetsToProject(assets, response, project) { children: [], fileType: 'file' }); - console.log(`create assets: ${assetName}`); + logger.debug(`create assets: ${assetName}`); // add asset file inside the newly created assets folder at index 4 project.files[4].children.push(fileID); } @@ -335,7 +336,9 @@ async function createProjectsInP5user(projectsInAllCategories) { await addAssetsToProject(assetsInProject, data, newProject); const savedProject = await newProject.save(); - console.log(`Created a new project in p5 user: ${savedProject.name}`); + logger.debug( + `Created a new project in p5 user: ${savedProject.name}` + ); }) ) ) @@ -344,7 +347,7 @@ async function createProjectsInP5user(projectsInAllCategories) { } async function getp5User() { - console.log('Getting p5 user'); + logger.debug('Getting p5 user'); const user = await User.findOne({ username: 'p5' }).exec(); let p5User = user; if (!p5User) { @@ -354,10 +357,10 @@ async function getp5User() { password: process.env.EXAMPLE_USER_PASSWORD }); await p5User.save(); - console.log(`Created a user p5 ${p5User}`); + logger.debug(`Created a user p5 ${p5User}`); } const projects = await Project.find({ user: p5User._id }).exec(); - console.log('Deleting old projects...'); + logger.debug('Deleting old projects...'); projects.forEach(async (project) => { await Project.deleteOne({ _id: project._id }); }); diff --git a/server/scripts/update-syntax-highlighting.js b/server/scripts/update-syntax-highlighting.js index 48be43ac82..e011381663 100644 --- a/server/scripts/update-syntax-highlighting.js +++ b/server/scripts/update-syntax-highlighting.js @@ -1,6 +1,7 @@ const fs = require('fs'); const process = require('process'); const axios = require('axios'); +const { default: logger } = require('../logger/winton'); axios.get('https://p5js.org/reference/data.json').then((response) => { const { data } = response; @@ -42,9 +43,9 @@ axios.get('https://p5js.org/reference/data.json').then((response) => { generatedCode, (error) => { if (error) { - console.log("Error!! Couldn't write to the file", error); + logger.error("Error!! Couldn't write to the file", error); } else { - console.log('Syntax highlighting files updated successfully'); + logger.debug('Syntax highlighting files updated successfully'); } } ); diff --git a/server/server.js b/server/server.js index 6722fc6181..3bc350030c 100644 --- a/server/server.js +++ b/server/server.js @@ -30,6 +30,7 @@ import { requestsOfTypeJSON } from './utils/requestsOfType'; import { renderIndex } from './views/index'; import { get404Sketch } from './views/404Page'; +import logger from './logger/winton'; const app = new Express(); const MongoStore = connectMongo(session); @@ -196,7 +197,7 @@ app.get('*', (req, res) => { // start app app.listen(process.env.PORT, (error) => { if (!error) { - console.log(`p5.js Web Editor is running on port: ${process.env.PORT}!`); // eslint-disable-line + logger.debug(`p5.js Web Editor is running on port: ${process.env.PORT}!`); // eslint-disable-line } }); From 4320889cf14c3f7e8a7bda7b7a358fb8ae19c2c0 Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 31 Dec 2023 10:51:07 +0530 Subject: [PATCH 2/2] lint fixe --- server/scripts/examples-ml5.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/scripts/examples-ml5.js b/server/scripts/examples-ml5.js index 2eada93892..4ac94efae2 100644 --- a/server/scripts/examples-ml5.js +++ b/server/scripts/examples-ml5.js @@ -1,3 +1,4 @@ +/* eslint-disable prettier/prettier */ import fs from 'fs'; import axios from 'axios'; import Q from 'q'; @@ -95,9 +96,8 @@ async function fetchFileContent(item) { } if (file.url) { - const cdnRef = `https://cdn.jsdelivr.net/gh/ml5js/ml5-library@${branchName}${ - file.url.split(branchName)[1] - }`; + const cdnRef = `https://cdn.jsdelivr.net/gh/ml5js/ml5-library@${branchName}${file.url.split(branchName)[1] + }`; file.url = cdnRef; }