import Env from "@ioc:Adonis/Core/Env";
import fs from "fs";
import moment from "moment/moment";
import dotenv from "dotenv";
import nodeMailer from "nodemailer";
dotenv.config();
export const sendDeviceInfora = async () => {
try {
//Regex check show inventory
const regexInventory = /sh.*? inv.*/;
//Regex check show version
const regexVersion = /sh.*? ver.*/;
const regexMemory = /(\d+)K/g;
const date = moment(Date.now()).format("YYYYMMDD");
const listInformation = [];
let html = "";
//List file today
const listFile = fs
.readdirSync(Env.get("FOLDER_LOGS"))
//Configure mail
const transporter = nodeMailer.createTransport({
pool: true,
host: "mail.ipsupply.com.au",
port: 465,
secure: true,
auth: {
user: "admin@apactech.io",
pass: "BGK!dyt6upd2eax1bhz",
},
});
//Read file in listFile
await listFile.map((file) => {
fs.readFile(Env.get("FOLDER_LOGS") + "/" + file, "utf8", (err, data) => {
if (err) {
console.log(`Error reading file: ${err}`);
} else {
//Array line
const lines = data?.split("\n");
const linesInventory = [];
//Get index of "lines" with show inv
lines?.map((line, index) => {
if (line.match(regexInventory) !== null) {
linesInventory.push(index);
}
});
// console.log(linesInventory);
//cut content with content1 = [linesInventory[index],linesInventory[index+1]] ...
linesInventory?.map((line, index) => {
const deviceContent = lines?.slice(
linesInventory[index],
linesInventory[index + 1]
);
let backgroundColor = "rgb(200 200 200 / 30%)"
const showInventory = [];
let check = true;
let begin = 0;
let end = 4;
//get showInventory content
while (check === true) {
if (
deviceContent
.slice(begin, end)
.filter(
(i) =>
i.includes("PID:") &&
i.includes("VID:") &&
i.includes("SN:")
).length > 0
) {
showInventory.push(deviceContent.slice(begin, end).join("\n"));
begin = end;
end = end + 4;
} else {
check = false;
}
}
const showInventoryContent = showInventory
.join("\n")
.split("\n")
.filter(
(i) =>
i.includes("PID:") && i.includes("VID:") && i.includes("SN:")
);
//show version exists
if (
deviceContent.filter((line) => line.match(regexVersion) !== null)
.length > 0
) {
const lineShowver = deviceContent.indexOf(
deviceContent.filter(
(line) => line.match(regexVersion) !== null
)[0]
);
const showVersion = deviceContent.slice(
lineShowver,
deviceContent.indexOf(
deviceContent.filter(
(line) => line.search("Configuration register") !== -1
)[0]
) + 1
);
showInventoryContent.map((u, index) => {
const PID = u
?.split("VID:")[0]
?.split("PID:")[1]
?.replace(/,/g, "")
.trim();
const VID = u
?.split("VID:")[1]
?.split("SN:")[0]
?.replace(/,/g, "")
.trim();
const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
// let memory =
if (index > 0) {
if (PID !== "" && SN !== "") {
// let RAM =
// showVersion
// .filter((line) => line.includes("bytes of memory"))
// .join("
")
// .match(regexMemory) !== null
// ? (
// parseInt(
// showVersion
// .filter((line) =>
// line.includes("bytes of memory")
// )
// .join("
")
// .match(regexMemory)[0]
// ) /
// 1024 /
// 1024
// ).toFixed(2) + "G"
// : "";
// let flash = showVersion
// .filter((line) =>
// line.toLocaleLowerCase().includes("compactflash")
// )
// .join("
");
listInformation.push({
PID: PID,
VID: VID,
SN: SN,
RAM: "",
flash: "",
extraItem: "yes",
});
html += `
| PID | \VID | \SN | \RAM | \Flash | \Extra Item | \
|---|