Advertisement
gitman3

Untitled

Apr 3rd, 2024
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. const express = require('express');
  2. const axios = require('axios');
  3.  
  4. const app = express();
  5. const PORT = 9876;
  6. const WINDOW_SIZE = 10;
  7.  
  8. let storedNumbers = [];
  9.  
  10. const fetchNumbers = async (type) => {
  11. try {
  12. const response = await axios.get(`http://20.244.56.144/test/${type}`);
  13. return response.data.numbers;
  14. } catch (error) {
  15. console.error('Error fetching numbers:', error);
  16. return [];
  17. }
  18. };
  19.  
  20. const calculateAverage = (arr) => {
  21. const sum = arr.reduce((acc, num) => acc + num, 0);
  22. return sum / arr.length;
  23. };
  24.  
  25. app.get('/numbers/:type', async (req, res) => {
  26. const { type } = req.params;
  27. const startTime = Date.now();
  28.  
  29. const fetchedNumbers = await fetchNumbers(type);
  30.  
  31. storedNumbers = storedNumbers.filter(num => !fetchedNumbers.includes(num));
  32. storedNumbers.push(...fetchedNumbers);
  33.  
  34. storedNumbers = [...new Set(storedNumbers)].slice(-WINDOW_SIZE);
  35.  
  36. let average = null;
  37. if (storedNumbers.length === WINDOW_SIZE) {
  38. average = calculateAverage(storedNumbers);
  39. }
  40.  
  41. const responseTime = Date.now() - startTime;
  42. const windowPrevState = storedNumbers.slice(0, storedNumbers.length - fetchedNumbers.length);
  43. const windowCurrState = storedNumbers;
  44.  
  45. const responseObject = {
  46. windowPrevState,
  47. windowCurrState,
  48. numbers: storedNumbers,
  49. avg: average
  50. };
  51.  
  52. res.json(responseObject);
  53. console.log(`Response time: ${responseTime}ms`);
  54. });
  55.  
  56. app.listen(PORT, () => {
  57. console.log(`Server running on port ${PORT}`);
  58. });
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement