File size: 2,105 Bytes
ed43e92
 
 
 
 
 
 
c791e2a
ed43e92
 
c791e2a
ed43e92
 
 
 
12d5b92
e01be37
 
284ae3c
 
ed43e92
284ae3c
 
 
 
e01be37
284ae3c
 
12d5b92
 
ed43e92
12d5b92
 
00cafc8
ed43e92
12d5b92
00cafc8
12d5b92
 
ed43e92
 
12d5b92
ed43e92
12d5b92
ed43e92
 
12d5b92
 
 
00cafc8
 
c791e2a
ed43e92
 
 
 
 
 
 
 
c791e2a
ed43e92
12d5b92
00cafc8
12d5b92
 
ed43e92
 
 
 
 
 
12d5b92
 
ed43e92
 
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
const express = require('express');
const bodyParser = require('body-parser');
const { translate } = require('./translate');
const cors = require('cors');
const fs = require('fs');
const app = express();
const PORT = 7860;

app.use(cors({ origin: '*' }));
app.use(bodyParser.json());

let delay = 1500;
const delayIncrement = 100;
const maxDelay = 5000;
let currentTranslations = 0;

function delayFileTermination(delay) {
  if (fs.existsSync('delay.txt')) {
    delay = parseInt(fs.readFileSync('delay.txt', 'utf8'));
  } else {
    fs.writeFile('delay.txt', `delay:${delay}`, function (err) {
      if (err === null) {
        console.log('success');
      } else {
        console.log('fail');
      }
    });
  }
}

console.log('File system loaded');

app.post('/translate', async (req, res) => {
  console.log('Translate start');
  currentTranslations++;

  const { text, source_lang, target_lang } = req.body;

  try {
    await new Promise((resolve) => setTimeout(resolve, delay));
    const result = await translate(text, source_lang, target_lang);
    const responseData = {
      alternatives: result.alternatives,
      code: 200,
      data: result.text,
      id: Math.floor(Math.random() * 10000000000),
      method: 'Free',
      source_lang,
      target_lang,
    };
    res.json(responseData);
  } catch (error) {
    console.error(`Translation failed: ${error}`);
    res.status(500).json({ error: 'Translation failed' });
    delay += delayIncrement;
    if (delay > maxDelay) {
      delay = maxDelay;
    }
    delayFileTermination(delay);
    console.log(`ν˜„μž¬ Delay νƒ€μž„: ${delay}ms`);
  } finally {
    currentTranslations--;
  }
});

app.get('/', (req, res) => {
  const delayMessage = fs.existsSync('delay.txt')
    ? fs.readFileSync('delay.txt', 'utf8')
    : '0';
  const statusMessage = `μ„œλ²„κ°€ κ΅¬λ™λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ λ”œλ ˆμ΄ μ‹œκ°„μ€ ${delay}ms이며, ν˜„μž¬ 처리 쀑인 λ²ˆμ—­ μš”μ²­ μˆ˜λŠ” ${currentTranslations}κ±΄μž…λ‹ˆλ‹€.`;
  res.send(statusMessage);
});

app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});