Flare-k

[Add] Collect Executing Time

1 /* eslint-disable no-console */ 1 /* eslint-disable no-console */
2 import routes from "../routes"; 2 import routes from "../routes";
3 import File from "../models/File"; 3 import File from "../models/File";
4 -import performance from "perf_hooks"; 4 +const createCsvWriter = require('csv-writer').createObjectCsvWriter;
5 - 5 +const csvInsertWriter = createCsvWriter({
6 + path: 'insertOutput.csv',
7 + header: [
8 + {id: 'ms', title: 'time'}
9 + ]
10 +});
11 +const csvSelectWriter = createCsvWriter({
12 + path: 'selectOutput.csv',
13 + header: [
14 + {id: 'ms', title: 'time'}
15 + ]
16 +});
6 export const home = async (req, res) => { 17 export const home = async (req, res) => {
7 try { 18 try {
8 - const files = await File.find({}).sort({ _id: -1 }); // 모든 비디오를 가져온다. 19 + const files = await File.find({}).sort({ _id: -1 }); // 모든 파일을 가져온다.
9 - res.render("home", { pageTitle: "Home", files }); // render DB에 저장된 video의 내용을 보여준다 20 + res.render("home", { pageTitle: "Home", files }); // render DB에 저장된 file의 내용을 보여준다
10 } catch (error) { 21 } catch (error) {
11 console.log(error); 22 console.log(error);
12 res.render("home", { pageTitle: "Home", files: [] }); 23 res.render("home", { pageTitle: "Home", files: [] });
13 } 24 }
14 }; 25 };
15 - 26 +const searchTime = new Array();
16 export const search = async (req, res) => { 27 export const search = async (req, res) => {
17 - console.time("SearchFunction"); 28 + const startTime = new Date().getTime();
18 const { 29 const {
19 query: { term: searchingBy }, 30 query: { term: searchingBy },
20 } = req; // == const searchingBy = req.query.term; 31 } = req; // == const searchingBy = req.query.term;
...@@ -23,7 +34,13 @@ export const search = async (req, res) => { ...@@ -23,7 +34,13 @@ export const search = async (req, res) => {
23 files = await File.find({ 34 files = await File.find({
24 title: { $regex: searchingBy, $options: "i" }, // i를 옵션으로 추가하면 insensitive.. 대소문자 구분 안함. 35 title: { $regex: searchingBy, $options: "i" }, // i를 옵션으로 추가하면 insensitive.. 대소문자 구분 안함.
25 }); 36 });
26 - console.timeEnd("SearchFunction"); 37 + const endTime = new Date().getTime(); // SELECT의 경우 파일 시간 측정
38 + searchTime.push({ms: endTime - startTime});
39 + if (searchTime.length === 3){
40 + csvSelectWriter
41 + .writeRecords(searchTime)
42 + .then(() => console.log("The CSV file was written successfully~"));
43 + }
27 } catch (error) { 44 } catch (error) {
28 console.log(error); 45 console.log(error);
29 } 46 }
...@@ -35,14 +52,14 @@ export const search = async (req, res) => { ...@@ -35,14 +52,14 @@ export const search = async (req, res) => {
35 export const getUpload = (req, res) => 52 export const getUpload = (req, res) =>
36 res.render("upload", { pageTitle: "Upload" }); 53 res.render("upload", { pageTitle: "Upload" });
37 54
55 +const insertTime = new Array();
38 export const postUpload = async (req, res) => { 56 export const postUpload = async (req, res) => {
39 - // const {} 를 통해 body를 받아와 요청하는 정보들을 확인한다. 57 + const startTime = new Date().getTime();
40 - // 이는 pug와 db.js를 확인해야하는 듯 하다. 58 + // multer를 해야 파일이 넘어가는 것이 나타난다.
41 - console.time("UploadFunction");
42 const { 59 const {
43 body: { title }, 60 body: { title },
44 - file: { path }, // path로 할때는 로컬의 경로. S3는 location 61 + file: { path },
45 - } = req; // file에 path라는 요소가 있다. 62 + } = req;
46 63
47 const newFile = await File.create({ 64 const newFile = await File.create({
48 fileUrl: path, 65 fileUrl: path,
...@@ -50,7 +67,13 @@ export const postUpload = async (req, res) => { ...@@ -50,7 +67,13 @@ export const postUpload = async (req, res) => {
50 // 여기있는 fileUrl, title은 fileDB의 속성이다. 67 // 여기있는 fileUrl, title은 fileDB의 속성이다.
51 }); 68 });
52 console.log(newFile); 69 console.log(newFile);
53 - console.timeEnd("UploadFunction"); 70 + const endTime = new Date().getTime(); // INSERT의 경우 파일 시간 측정
71 + insertTime.push({ms: endTime - startTime});
72 + if (insertTime.length === 3){
73 + csvInsertWriter
74 + .writeRecords(insertTime)
75 + .then(() => console.log("The CSV file was written successfully~"));
76 + }
54 res.redirect(routes.home); 77 res.redirect(routes.home);
55 }; 78 };
56 79
...@@ -74,7 +97,7 @@ export const deleteFile = async (req, res) => { ...@@ -74,7 +97,7 @@ export const deleteFile = async (req, res) => {
74 } = req; 97 } = req;
75 try { 98 try {
76 const file = await File.findById(id); 99 const file = await File.findById(id);
77 - // video를 받아서 render로 통해 템플릿으로 던져준다, 100 + // file을 받아서 render로 통해 템플릿으로 던져준다,
78 if (String(file.creator) !== req.user.id) { 101 if (String(file.creator) !== req.user.id) {
79 throw Error(); 102 throw Error();
80 } else { 103 } else {
......
1 import dotenv from "dotenv"; 1 import dotenv from "dotenv";
2 import multer from "multer"; 2 import multer from "multer";
3 -import multerS3 from "multer-s3";
4 -import aws from "aws-sdk";
5 import routes from "./routes"; 3 import routes from "./routes";
6 4
7 dotenv.config(); 5 dotenv.config();
8 6
9 -const s3 = new aws.S3({
10 - accessKeyId: process.env.AWS_KEY,
11 - secretAccessKey: process.env.AWS_PRIVATEE_KEY,
12 - region: "ap-northeast-2",
13 -});
14 -
15 const multerFile = multer({ dest: "uploads/files/" }); 7 const multerFile = multer({ dest: "uploads/files/" });
16 8
17 export const localsMiddleware = (req, res, next) => { 9 export const localsMiddleware = (req, res, next) => {
......
1 +Ms
2 +21
3 +5
4 +3
...@@ -1797,6 +1797,11 @@ ...@@ -1797,6 +1797,11 @@
1797 "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 1797 "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
1798 "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" 1798 "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
1799 }, 1799 },
1800 + "bignumber.js": {
1801 + "version": "9.0.0",
1802 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
1803 + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
1804 + },
1800 "binary": { 1805 "binary": {
1801 "version": "0.3.0", 1806 "version": "0.3.0",
1802 "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", 1807 "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
...@@ -2917,6 +2922,11 @@ ...@@ -2917,6 +2922,11 @@
2917 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 2922 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2918 "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" 2923 "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
2919 }, 2924 },
2925 + "csv-writer": {
2926 + "version": "1.6.0",
2927 + "resolved": "https://registry.npmjs.org/csv-writer/-/csv-writer-1.6.0.tgz",
2928 + "integrity": "sha512-NOx7YDFWEsM/fTRAJjRpPp8t+MKRVvniAg9wQlUKx20MFrPs73WLJhFf5iteqrxNYnsy924K3Iroh3yNHeYd2g=="
2929 + },
2920 "currently-unhandled": { 2930 "currently-unhandled": {
2921 "version": "0.4.1", 2931 "version": "0.4.1",
2922 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 2932 "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
...@@ -5970,6 +5980,17 @@ ...@@ -5970,6 +5980,17 @@
5970 "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 5980 "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
5971 "dev": true 5981 "dev": true
5972 }, 5982 },
5983 + "mysql": {
5984 + "version": "2.18.1",
5985 + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
5986 + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
5987 + "requires": {
5988 + "bignumber.js": "9.0.0",
5989 + "readable-stream": "2.3.7",
5990 + "safe-buffer": "5.1.2",
5991 + "sqlstring": "2.3.1"
5992 + }
5993 + },
5973 "nan": { 5994 "nan": {
5974 "version": "2.14.1", 5995 "version": "2.14.1",
5975 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", 5996 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
...@@ -8207,6 +8228,11 @@ ...@@ -8207,6 +8228,11 @@
8207 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 8228 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
8208 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 8229 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
8209 }, 8230 },
8231 + "sqlstring": {
8232 + "version": "2.3.1",
8233 + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
8234 + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
8235 + },
8210 "sshpk": { 8236 "sshpk": {
8211 "version": "1.16.1", 8237 "version": "1.16.1",
8212 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 8238 "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
29 "connect-mongo": "^3.2.0", 29 "connect-mongo": "^3.2.0",
30 "cookie-parser": "^1.4.5", 30 "cookie-parser": "^1.4.5",
31 "css-loader": "^3.5.3", 31 "css-loader": "^3.5.3",
32 + "csv-writer": "^1.6.0",
32 "dotenv": "^8.2.0", 33 "dotenv": "^8.2.0",
33 "express": "^4.17.1", 34 "express": "^4.17.1",
34 "express-flash": "0.0.2", 35 "express-flash": "0.0.2",
...@@ -40,6 +41,7 @@ ...@@ -40,6 +41,7 @@
40 "morgan": "^1.10.0", 41 "morgan": "^1.10.0",
41 "multer": "^1.4.2", 42 "multer": "^1.4.2",
42 "multer-s3": "^2.9.0", 43 "multer-s3": "^2.9.0",
44 + "mysql": "^2.18.1",
43 "ngrok": "^3.2.7", 45 "ngrok": "^3.2.7",
44 "node-sass": "^4.14.1", 46 "node-sass": "^4.14.1",
45 "passport": "^0.4.1", 47 "passport": "^0.4.1",
......