-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_e1.js
142 lines (128 loc) · 5.71 KB
/
main_e1.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
const { exec } = require("child_process");
const express = require("express");
const app = express();
const multer = require("multer");
const uuid4 = require("uuid4");
const path = require("path");
const nodeName = process.env.NODE_NAME; // 환경 변수에서 nodeName을 가져옵니다.
app.use(express.static(path.join(__dirname, "public")));
const upload = multer({
storage: multer.diskStorage({
filename(req, file, done) {
const randomID = uuid4();
const ext = path.extname(file.originalname);
done(null, `${randomID}${ext}`);
},
destination: path.join(__dirname, "files")
}),
});
const uploadMiddleware = upload.array("myFiles");
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
app.post("/yes-tpu", uploadMiddleware, (req, res) => {
console.log("enter api no start")
let results = [];
let promises = req.files.map(file => {
return new Promise((resolve, reject) => {
let pythonCommand;
console.log('enter promise')
if (nodeName === 'nodeone') {
console.log(`Processing on nodeone: ${file.filename}`);
pythonCommand = `python3 /coral/pycoral/examples/ci4.py \
--model /coral/pycoral/test_data/mobilenet_v2_1.0_224_inat_bird_quant.tflite \
--labels /coral/pycoral/test_data/inat_bird_labels.txt \
--input ${file.path}`;
} else if (nodeName === 'nodetwo' || nodeName === 'nodethree') {
console.log(`Processing on nodetwo or nodethree: ${file.filename}`);
pythonCommand = `python3 /coral/pycoral/examples/ci3.py \
--model /coral/pycoral/test_data/mobilenet_v2_1.0_224_inat_bird_quant.tflite \
--labels /coral/pycoral/test_data/inat_bird_labels.txt \
--input ${file.path}`;
} else {
console.log("Error: Node name does not match any specific conditions.");
reject("Node name error");
}
const start = process.hrtime();
exec(pythonCommand, (error, stdout, stderr) => {
const end = process.hrtime(start);
if (error || stderr) {
console.error(`Execution error for file ${file.filename}: ${error || stderr}`);
results.push({node: nodeName, output: stdout,sec : end[0],nano : end[1]});
resolve(); // Continue with other files
} else {
console.log(`Output for file ${file.filename}: ${stdout}`);
//file.filename
//results.push({node: nodeName, output: stdout});
// const end = process.hrtime(start);
results.push({node : nodeName,second : end[0],nanosec : end[1]}) //시간 측정
resolve();
}
});
});
});
console.log('upto return')
Promise.all(promises).then(() => {
res.json(results); // Send combined results back to client
}).catch(err => {
res.status(500).send(`Error processing files: ${err}`);
});
});
// function delay(ms) {
// return new Promise(resolve => setTimeout(resolve, ms));
// }
// app.post("/yes-tpu", uploadMiddleware, async (req, res) => {
// console.log("Enter API");
// let results = [];
// const start = process.hrtime();
// for (const file of req.files) {
// await delay(1000); // 각 파일 처리 전 1초 지연
// const pythonCommand = buildPythonCommand(file); // 파이썬 명령어 구성
// console.log(`Processing: ${file.filename}`);
// try {
// const { error, stdout, stderr } = await executePythonCommand(pythonCommand);
// if (error || stderr) {
// console.error(`Execution error for file ${file.filename}: ${error || stderr}`);
// results.push({ node: nodeName, error: error.message || stderr });
// } else {
// console.log(`Output for file ${file.filename}: ${stdout}`);
// results.push({node : nodeName})
// }
// } catch (err) {
// console.error(`Unhandled error for file ${file.filename}: ${err}`);
// results.push({ node: nodeName, error: err.message });
// }
// }
// const end = process.hrtime(start);
// results.push({total_sec : end[0],total_nano_sec : end[1]})
// res.json(results); // 결과 반환
// });
// function buildPythonCommand(file) {
// if (nodeName === 'nodeone') {
// return `python3 /coral/pycoral/examples/ci4.py \
// --model /coral/pycoral/test_data/mobilenet_v2_1.0_224_inat_bird_quant.tflite \
// --labels /coral/pycoral/test_data/inat_bird_labels.txt \
// --input ${file.path}`;
// } else if (nodeName === 'nodetwo' || nodeName === 'nodethree') {
// return `python3 /coral/pycoral/examples/classify_image.py \
// --model /coral/pycoral/test_data/mobilenet_v2_1.0_224_inat_bird_quant.tflite \
// --labels /coral/pycoral/test_data/inat_bird_labels.txt \
// --input ${file.path}`;
// } else {
// throw new Error("Node name does not match any specific conditions.");
// }
// }
// async function executePythonCommand(command) {
// return new Promise((resolve, reject) => {
// exec(command, (error, stdout, stderr) => {
// if (error || stderr) {
// reject({ error, stderr });
// } else {
// resolve({ stdout });
// }
// });
// });
// }
app.listen(12345, () => {
console.log("Server is running at port 12345");
});