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 }
...@@ -33,57 +50,63 @@ export const search = async (req, res) => { ...@@ -33,57 +50,63 @@ export const search = async (req, res) => {
33 50
34 // upload 또한 upload를 준비하기 위한 get 페이지와 실제 데이터를 보내는 post 페이지가 필요하다. 51 // upload 또한 upload를 준비하기 위한 get 페이지와 실제 데이터를 보내는 post 페이지가 필요하다.
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"); 59 + const {
42 - const { 60 + body: { title },
43 - body: { title }, 61 + file: { path },
44 - file: { path }, // path로 할때는 로컬의 경로. S3는 location 62 + } = req;
45 - } = req; // file에 path라는 요소가 있다.
46 63
47 - const newFile = await File.create({ 64 + const newFile = await File.create({
48 - fileUrl: path, 65 + fileUrl: path,
49 - title, 66 + title,
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
57 export const fileDetail = async (req, res) => { 80 export const fileDetail = async (req, res) => {
58 - // console.log(req.params); params에 id가 있다는걸 알게 됨 81 + // console.log(req.params); params에 id가 있다는걸 알게 됨
59 - const { 82 + const {
60 - params: { id }, 83 + params: { id },
61 - } = req; 84 + } = req;
62 - try { 85 + try {
63 - const file = await File.findById(id); 86 + const file = await File.findById(id);
64 - res.render("fileDetail", { pageTitle: file.title, file }); 87 + res.render("fileDetail", { pageTitle: file.title, file });
65 - } catch (error) { 88 + } catch (error) {
66 - res.redirect(routes.home); 89 + res.redirect(routes.home);
67 - } 90 + }
68 }; 91 };
69 92
70 93
71 export const deleteFile = async (req, res) => { 94 export const deleteFile = async (req, res) => {
72 - const { 95 + const {
73 - params: { id }, 96 + params: { id },
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 {
81 - await File.findOneAndRemove({ _id: id }); 104 + await File.findOneAndRemove({ _id: id });
105 + }
106 + } catch (error) {
107 + console.log(error);
82 } 108 }
83 - } catch (error) { 109 + // 삭제를 실패하던 성공하던 home으로 redirect한다.
84 - console.log(error); 110 + res.redirect(routes.home);
85 - }
86 - // 삭제를 실패하던 성공하던 home으로 redirect한다.
87 - res.redirect(routes.home);
88 }; 111 };
89 112
......
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",
......