import fs from "fs"; import type { HttpContextContract } from "@ioc:Adonis/Core/HttpContext"; import axios from "axios"; export default class ErpsController { /** * 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) */ public async getIndexSerialNumber({ request, response, }: HttpContextContract) { const { from, to } = request.all(); const getListLog = async (from, to) => { try { // console.log("check!") const listLog:string[] = [] 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 { 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 { let fName = urls[index] ?.split("/") [urls[index]?.split("/")?.length - 1]?.trim(); 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: fName, warehouse: fName.search("-US") !== -1 || fName.search(".US") !== -1 || fName.search("US-") !== -1 ? "US" : "AU", }); } } if (arrayLine[i].search("PCB Serial Number") !== -1) { if ( //Neu SN da nam trong output 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 { let fName = urls[index] ?.split("/") [urls[index]?.split("/")?.length - 1]?.trim(); output.push({ PID: "", VID: "", SN: arrayLine[i]?.split(":")[1]?.replace("\r", "").trim(), line: [i + 1], fileName: fName, warehouse: fName.search("-US") !== -1 || fName.search(".US") !== -1 || fName.search("US-") !== -1 ? "US" : "AU", }); } } if (arrayLine[i].search("Processor board ID") !== -1) { if ( //Neu SN da nam trong output output.some( (u) => u.SN === arrayLine[i] ?.split(" ") [arrayLine[i]?.split(" ").length - 1]?.replace("\r", "") .trim() ) ) { output.map((u, index) => { if ( u.SN === arrayLine[i] ?.split(" ") [arrayLine[i]?.split(" ").length - 1]?.replace("\r", "") .trim() ) { output[index].line = output[index].line.concat([i + 1]); } }); } else { let fName = urls[index] ?.split("/") [urls[index]?.split("/")?.length - 1]?.trim(); output.push({ PID: "", VID: "", SN: arrayLine[i] ?.split(" ") [arrayLine[i]?.split(" ").length - 1]?.replace("\r", "") .trim(), line: [i + 1], fileName: fName, warehouse: fName.search("-US") !== -1 || fName.search(".US") !== -1 || fName.search("US-") !== -1 ? "US" : "AU", }); } } } report = report.concat(output); } }); fs.writeFile( "./app/utils/indexSN.txt", JSON.stringify(report) .replace(/,{/g, "\n,{") .replace(/\\u0000/g, ""), function (err) { if (err) { return console.error(err); } console.log("Write loggg !"); } ); // console.log(report); return report; // }, 15000); } catch (error) { response .status(500) .send({ mess: "GET INFORMATION FAIL", error: error }); } }; const result = await fetchFiles(from, to); response.status(200).json(result); } /** * 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 */ public async getParagraph({ request, response }: HttpContextContract) { const { fileName, line, range } = request.all(); try { const res = await axios.get("http://192.168.5.7:8080/" + fileName); const arrayLine = res?.data?.split("\n"); // console.log(arrayLine) if (range >= line) { response.status(200).json({ content: arrayLine?.slice(0, line + range)?.join("\n"), }); } else { response.status(200).json({ content: arrayLine?.slice(line - range - 1, line + range)?.join("\n"), }); } } catch (error) { console.log(error); response .status(500) .send({ mess: "GET CONTENT FILE FAIL", error: error }); } } public async store({}: HttpContextContract) {} public async show({}: HttpContextContract) {} public async edit({}: HttpContextContract) {} public async update({}: HttpContextContract) {} public async destroy({}: HttpContextContract) {} }