const axios = require("axios"); const fs = require("fs"); const http = require("http"); const jwt = require("jsonwebtoken"); /** * Controller do tim cac serial number trong cac log trong khoang thoi gian xac dinh * @param {Integer} from thoi gian bat dau YYYYMMDD (vd: 20230130) * @param {Integer} to thoi gian ket thuc YYYYMMDD (vd: 20230230) */ exports.getIndexSerialNumber = async function (req, res) { const { from, to } = req.body; let accessToken = ""; const getListLog = async (from, to) => { try { // console.log("check!") let listLog = []; const response = await axios.get('http://192.168.5.7:8080/') const data = response.data const arrayLine = data .split("\n") .filter( (i) => i.search(" { let temp = u .slice(u.search("")) .split(">")[1]; if ( parseInt(temp?.split("-")[0]) >= from && parseInt(temp?.split("-")[0]) <= to ) { listLog.push( "http://192.168.5.7:8080/" + u.slice(u.search("")).split(">")[1] + " " ); } }); return listLog } catch (error) { console.log(error); } }; const fetchFiles = async (from, to) => { try { console.log("1") const urls = await getListLog(from, to); let report = []; const fileContents = await Promise.all( urls.map(async (url) => { const maxRetries = 10; let retries = 0; while (retries < maxRetries) { try { const response = await axios.get(url?.split(" ")[0]); return response.data; } catch (error) { if (error.code !== "") { //=== "ETIMEDOUT" || error.code === "ECONNRESET" // console.log("Connection timed out. Retrying..."); retries++; } else { console.error("Error fetching file:", error); return; } } } }) ); // Handle the file contents fileContents.forEach((content, index) => { console.log(`Content of file ${index + 1}:`); const arrayLine = content?.split("\n"); let output = []; if (arrayLine !== undefined) { for (let i = 0; i < arrayLine.length; i++) { if ( arrayLine[i].search("PID:") !== -1 && arrayLine[i].search("SN:") !== -1 && arrayLine[i].search("%") === -1 && arrayLine[i] ?.split(",")[2] ?.split(":")[1] ?.replace("\r", "") .trim() !== "" && arrayLine[i] ?.split(",")[2] ?.split(":")[1] ?.replace("\r", "") .trim() !== "N/A" ) { if ( output.some( (u) => u.SN === arrayLine[i] ?.split(",")[2] ?.split(":")[1] ?.replace("\r", "") .trim() ) ) { output.map((u, index) => { if ( u.SN === arrayLine[i]?.split(",")[2]?.split(":")[1].trim() ) { output[index].line = output[index].line.concat([i + 1]); } }); } else { output.push({ PID: arrayLine[i]?.split(",")[0] !== undefined ? arrayLine[i]?.split(",")[0]?.split(":")[1] !== undefined ? arrayLine[i]?.split(",")[0]?.split(":")[1]?.trim() : "" : "", VID: arrayLine[i]?.split(",")[0] !== undefined ? arrayLine[i]?.split(",")[1]?.split(":")[1] !== undefined ? arrayLine[i]?.split(",")[1]?.split(":")[1]?.trim() : "" : "", SN: arrayLine[i].split(",")[1] !== undefined ? arrayLine[i] ?.split(",")[2] ?.split(":")[1] ?.replace("\r", "") .trim() : "", line: [i + 1], fileName: urls[index]?.split("/")[urls[index]?.split("/")?.length-1]?.trim(), }); } } if(arrayLine[i].search("PCB Serial Number") !== -1){ if ( output.some( (u) => u.SN === arrayLine[i] ?.split(":")[1] ?.replace("\r", "") .trim() ) ) { output.map((u, index) => { if ( u.SN === arrayLine[i]?.split(":")[1]?.replace("\r", "").trim() ) { output[index].line = output[index].line.concat([i + 1]); } }); } else { output.push({ PID: "", VID: "", SN: arrayLine[i]?.split(":")[1]?.replace("\r", "").trim(), line: [i + 1], fileName: urls[index]?.split("/")[urls[index]?.split("/")?.length-1]?.trim(), }); } } } report = report.concat(output); } }); fs.writeFile( "./utils/ERP/indexSN.txt", JSON.stringify(report).replace(/,{/g, "\n,{").replace(/\\u0000/g, ""), function (err) { if (err) { return console.error(err); } console.log("Write loggg !"); } ); res.json(report); // }, 15000); } catch (error) { console.error("Error fetching files:", error); } }; if ( req.headers.authorization && req.headers.authorization.split(" ")[0] === "Bearer" ) { accessToken = accessToken + req.headers.authorization.split(" ")[1]; } jwt.verify(accessToken, "process.env.JWT_ACCESS_KEY", (err, user) => { if (err) { res.json({ pCode: 0, pMess: "Token invalid", }); } else { const result = fetchFiles(from, to); } }); }; /** * Controller lay noi dung file log theo so dong * @param {String} fileName url file log tren server log * @param {Integer} line dong chua serial number trong log * @param {Integer} range khoang dong truoc/sau line * @author {Bearer Token} req.headers.authorization //token xac thuc */ exports.getParagraph = async function (req, res) { const { fileName, line, range } = req.body; let accessToken = ""; try { if ( req.headers.authorization && req.headers.authorization.split(" ")[0] === "Bearer" ) { accessToken = accessToken + req.headers.authorization.split(" ")[1]; } jwt.verify(accessToken, "process.env.JWT_ACCESS_KEY", async(err, user) => { if (err) { res.json({ pCode: 0, pMess: "Token invalid", }); } else { const file = fs.createWriteStream("./utils/ERP/logFile.log"); const response = await axios.get('http://192.168.5.7:8080/'+fileName) const arrayLine = response.data.split("\n"); if(range>=line){ res.json({ content: arrayLine ?.slice(0, line + range) ?.join("\n"), }); }else{ res.json({ content: arrayLine ?.slice(line - range - 1, line + range) ?.join("\n"), }); } // console.log() } }); } catch (error) { console.log(error); } };