Merge branch 'main' of https://gitea.nswteam.net/joseph/Log_service
This commit is contained in:
		
						commit
						4be9cc7ff5
					
				| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					import { DateTime } from 'luxon'
 | 
				
			||||||
 | 
					import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class InfoDevice extends BaseModel {
 | 
				
			||||||
 | 
					  public static table = 'info_devices'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column({ isPrimary: true })
 | 
				
			||||||
 | 
					  public id_info: number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public PID: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public SN: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public VID: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public RAM: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public flash: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public extraItem: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column.dateTime({ autoCreate: true })
 | 
				
			||||||
 | 
					  public created_at: DateTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column.dateTime({ autoCreate: true, autoUpdate: true })
 | 
				
			||||||
 | 
					  public updated_at: DateTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,9 @@ export default class LogDetectFile extends BaseModel {
 | 
				
			||||||
  @column()
 | 
					  @column()
 | 
				
			||||||
  public file_name: string
 | 
					  public file_name: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @column()
 | 
				
			||||||
 | 
					  public last_check_SN: number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @column.dateTime({ autoCreate: true })
 | 
					  @column.dateTime({ autoCreate: true })
 | 
				
			||||||
  public created_at: DateTime
 | 
					  public created_at: DateTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,10 @@
 | 
				
			||||||
import Env from "@ioc:Adonis/Core/Env";
 | 
					import Env from "@ioc:Adonis/Core/Env";
 | 
				
			||||||
import fs from "fs";
 | 
					import fs from "fs";
 | 
				
			||||||
import moment from "moment/moment";
 | 
					import moment from "moment/moment";
 | 
				
			||||||
import dotenv from "dotenv";
 | 
					 | 
				
			||||||
import nodeMailer from "nodemailer";
 | 
					import nodeMailer from "nodemailer";
 | 
				
			||||||
dotenv.config();
 | 
					import LogDetectFile from "App/Models/LogDetectFile";
 | 
				
			||||||
 | 
					import InfoDevice from "App/Models/InfoDevice";
 | 
				
			||||||
 | 
					import KeyValue from "App/Models/KeyValue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const sendDeviceInfora = async () => {
 | 
					export const sendDeviceInfora = async () => {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
| 
						 | 
					@ -13,12 +14,17 @@ export const sendDeviceInfora = async () => {
 | 
				
			||||||
    const regexVersion = /sh.*? ver.*/;
 | 
					    const regexVersion = /sh.*? ver.*/;
 | 
				
			||||||
    const regexMemory = /(\d+)K/g;
 | 
					    const regexMemory = /(\d+)K/g;
 | 
				
			||||||
    const date = moment(Date.now()).format("YYYYMMDD");
 | 
					    const date = moment(Date.now()).format("YYYYMMDD");
 | 
				
			||||||
 | 
					    const memDefault = (await KeyValue.all())
 | 
				
			||||||
 | 
					      .filter((i) => i.$attributes.key === "MEMORY_DEFAULT")
 | 
				
			||||||
 | 
					      .map((obj) => obj.$attributes.value);
 | 
				
			||||||
    const listInformation = [];
 | 
					    const listInformation = [];
 | 
				
			||||||
 | 
					    let dataFile = await LogDetectFile.all();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let html = "";
 | 
					    let html = "";
 | 
				
			||||||
    //List file today
 | 
					    //List file today
 | 
				
			||||||
    const listFile = fs
 | 
					    const listFile = fs
 | 
				
			||||||
      .readdirSync(Env.get("FOLDER_LOGS"))
 | 
					      .readdirSync(Env.get("FOLDER_LOGS"))
 | 
				
			||||||
 | 
					      .filter((f) => f.includes(date) && f.split(".")[f.split(".").length - 1]);
 | 
				
			||||||
    //Configure mail
 | 
					    //Configure mail
 | 
				
			||||||
    const transporter = nodeMailer.createTransport({
 | 
					    const transporter = nodeMailer.createTransport({
 | 
				
			||||||
      pool: true,
 | 
					      pool: true,
 | 
				
			||||||
| 
						 | 
					@ -32,179 +38,212 @@ export const sendDeviceInfora = async () => {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Read file in listFile
 | 
					    //Read file in listFile
 | 
				
			||||||
    await listFile.map((file) => {
 | 
					    await listFile.map(async (file) => {
 | 
				
			||||||
      fs.readFile(Env.get("FOLDER_LOGS") + "/" + file, "utf8", (err, data) => {
 | 
					      fs.readFile(
 | 
				
			||||||
        if (err) {
 | 
					        Env.get("FOLDER_LOGS") + "/" + file,
 | 
				
			||||||
          console.log(`Error reading file: ${err}`);
 | 
					        "utf8",
 | 
				
			||||||
        } else {
 | 
					        async (err, data) => {
 | 
				
			||||||
          //Array line
 | 
					          if (err) {
 | 
				
			||||||
          const lines = data?.split("\n");
 | 
					            console.log(`Error reading file: ${err}`);
 | 
				
			||||||
          const linesInventory = [];
 | 
					          } else {
 | 
				
			||||||
          //Get index of "lines" with show inv
 | 
					            //Array line
 | 
				
			||||||
          lines?.map((line, index) => {
 | 
					            const lines = data?.split("\n");
 | 
				
			||||||
            if (line.match(regexInventory) !== null) {
 | 
					            const linesInventory = [];
 | 
				
			||||||
              linesInventory.push(index);
 | 
					            let DBFileCheck = dataFile.filter(
 | 
				
			||||||
            }
 | 
					              (i) => i.$attributes.file_name === file
 | 
				
			||||||
          });
 | 
					            )[0];
 | 
				
			||||||
          // console.log(linesInventory);
 | 
					            if (DBFileCheck !== undefined) {
 | 
				
			||||||
          //cut content with content1 = [linesInventory[index],linesInventory[index+1]] ...
 | 
					              if (lines.length > DBFileCheck?.$extras.last_check_SN) {
 | 
				
			||||||
          linesInventory?.map((line, index) => {
 | 
					                const DBFile = await LogDetectFile.find(
 | 
				
			||||||
            const deviceContent = lines?.slice(
 | 
					                  DBFileCheck?.$attributes.id_ldf
 | 
				
			||||||
              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
 | 
					                // console.log(DBFile)
 | 
				
			||||||
            while (check === true) {
 | 
					
 | 
				
			||||||
              if (
 | 
					                DBFile.last_check_SN = lines.length;
 | 
				
			||||||
                deviceContent
 | 
					                await DBFile.save();
 | 
				
			||||||
                  .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;
 | 
					 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            } else {
 | 
				
			||||||
 | 
					              await LogDetectFile.firstOrCreate(
 | 
				
			||||||
            const showInventoryContent = showInventory
 | 
					                { file_name: file },
 | 
				
			||||||
              .join("\n")
 | 
					                { file_name: file }
 | 
				
			||||||
              .split("\n")
 | 
					 | 
				
			||||||
              .filter(
 | 
					 | 
				
			||||||
                (i) =>
 | 
					 | 
				
			||||||
                  i.includes("PID:") && i.includes("VID:") && i.includes("SN:")
 | 
					 | 
				
			||||||
              );
 | 
					              );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //show version exists
 | 
					              dataFile = await LogDetectFile.all();
 | 
				
			||||||
            if (
 | 
					              DBFileCheck = dataFile.filter(
 | 
				
			||||||
              deviceContent.filter((line) => line.match(regexVersion) !== null)
 | 
					                (i) => i.$attributes.file_name === file
 | 
				
			||||||
                .length > 0
 | 
					              )[0];
 | 
				
			||||||
            ) {
 | 
					            }
 | 
				
			||||||
              const lineShowver = deviceContent.indexOf(
 | 
					
 | 
				
			||||||
 | 
					            //Get index of "lines" with show inv
 | 
				
			||||||
 | 
					            lines
 | 
				
			||||||
 | 
					              ?.slice(DBFileCheck?.$extras.last_check_SN, lines.length - 1)
 | 
				
			||||||
 | 
					              .map((line, index) => {
 | 
				
			||||||
 | 
					                if (line.match(regexInventory) !== null) {
 | 
				
			||||||
 | 
					                  linesInventory.push(index);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //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(
 | 
					                deviceContent.filter(
 | 
				
			||||||
                  (line) => line.match(regexVersion) !== null
 | 
					                  (line) => line.match(regexVersion) !== null
 | 
				
			||||||
                )[0]
 | 
					                ).length > 0
 | 
				
			||||||
              );
 | 
					              ) {
 | 
				
			||||||
 | 
					                const lineShowver = deviceContent.indexOf(
 | 
				
			||||||
              const showVersion = deviceContent.slice(
 | 
					 | 
				
			||||||
                lineShowver,
 | 
					 | 
				
			||||||
                deviceContent.indexOf(
 | 
					 | 
				
			||||||
                  deviceContent.filter(
 | 
					                  deviceContent.filter(
 | 
				
			||||||
                    (line) => line.search("Configuration register") !== -1
 | 
					                    (line) => line.match(regexVersion) !== null
 | 
				
			||||||
                  )[0]
 | 
					                  )[0]
 | 
				
			||||||
                ) + 1
 | 
					                );
 | 
				
			||||||
              );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
              showInventoryContent.map((u, index) => {
 | 
					                const showVersion = deviceContent.slice(
 | 
				
			||||||
                const PID = u
 | 
					                  lineShowver,
 | 
				
			||||||
                  ?.split("VID:")[0]
 | 
					                  deviceContent.indexOf(
 | 
				
			||||||
                  ?.split("PID:")[1]
 | 
					                    deviceContent.filter(
 | 
				
			||||||
                  ?.replace(/,/g, "")
 | 
					                      (line) => line.search("Configuration register") !== -1
 | 
				
			||||||
                  .trim();
 | 
					                    )[0]
 | 
				
			||||||
                const VID = u
 | 
					                  ) + 1
 | 
				
			||||||
                  ?.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("<br>")
 | 
					 | 
				
			||||||
                    //     .match(regexMemory) !== null
 | 
					 | 
				
			||||||
                    //     ? (
 | 
					 | 
				
			||||||
                    //         parseInt(
 | 
					 | 
				
			||||||
                    //           showVersion
 | 
					 | 
				
			||||||
                    //             .filter((line) =>
 | 
					 | 
				
			||||||
                    //               line.includes("bytes of memory")
 | 
					 | 
				
			||||||
                    //             )
 | 
					 | 
				
			||||||
                    //             .join("<br>")
 | 
					 | 
				
			||||||
                    //             .match(regexMemory)[0]
 | 
					 | 
				
			||||||
                    //         ) /
 | 
					 | 
				
			||||||
                    //         1024 /
 | 
					 | 
				
			||||||
                    //         1024
 | 
					 | 
				
			||||||
                    //       ).toFixed(2) + "G"
 | 
					 | 
				
			||||||
                    //     : "";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    // let flash = showVersion
 | 
					                showInventoryContent.map((u, index) => {
 | 
				
			||||||
                    //   .filter((line) =>
 | 
					                  const PID = u
 | 
				
			||||||
                    //     line.toLocaleLowerCase().includes("compactflash")
 | 
					                    ?.split("VID:")[0]
 | 
				
			||||||
                    //   )
 | 
					                    ?.split("PID:")[1]
 | 
				
			||||||
                    //   .join("<br>");
 | 
					                    ?.replace(/,/g, "")
 | 
				
			||||||
                    listInformation.push({
 | 
					                    .trim();
 | 
				
			||||||
                      PID: PID,
 | 
					                  const VID = u
 | 
				
			||||||
                      VID: VID,
 | 
					                    ?.split("VID:")[1]
 | 
				
			||||||
                      SN: SN,
 | 
					                    ?.split("SN:")[0]
 | 
				
			||||||
                      RAM: "",
 | 
					                    ?.replace(/,/g, "")
 | 
				
			||||||
                      flash: "",
 | 
					                    .trim();
 | 
				
			||||||
                      extraItem: "yes",
 | 
					                  const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
 | 
				
			||||||
                    });
 | 
					                  //   let memory =
 | 
				
			||||||
 | 
					                  if (index > 0) {
 | 
				
			||||||
 | 
					                    if (PID !== "" && SN !== "") {
 | 
				
			||||||
 | 
					                      listInformation.push({
 | 
				
			||||||
 | 
					                        PID: PID,
 | 
				
			||||||
 | 
					                        VID: VID,
 | 
				
			||||||
 | 
					                        SN: SN,
 | 
				
			||||||
 | 
					                        RAM: "",
 | 
				
			||||||
 | 
					                        flash: "",
 | 
				
			||||||
 | 
					                        extra_item: "yes",
 | 
				
			||||||
 | 
					                      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    html += `<tr><td>${PID}</td>
 | 
					                      html += `<tr><td>${PID}</td>
 | 
				
			||||||
                  <td>${VID}</td>
 | 
					                  <td>${VID}</td>
 | 
				
			||||||
                  <td>${SN}</td>
 | 
					                  <td>${SN}</td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td>yes</td></tr>`;
 | 
					                  <td>yes</td></tr>`;
 | 
				
			||||||
                  }
 | 
					                    }
 | 
				
			||||||
                } else {
 | 
					                  } else {
 | 
				
			||||||
                  if (PID !== "" && SN !== "") {
 | 
					                    if (PID !== "" && SN !== "") {
 | 
				
			||||||
                    let RAM =
 | 
					                      const memDefaultForPID =
 | 
				
			||||||
                      showVersion
 | 
					                        memDefault.filter((i) =>
 | 
				
			||||||
                        .filter((line) => line.includes("bytes of memory") || line.includes("bytes of physical memory"))
 | 
					                          PID.includes(i.split(":")[0])
 | 
				
			||||||
                        .join("<br>")
 | 
					                        )[0] !== undefined
 | 
				
			||||||
                        .match(regexMemory) !== null
 | 
					                          ? memDefault.filter((i) =>
 | 
				
			||||||
                        ? (
 | 
					                              PID.includes(i.split(":")[0])
 | 
				
			||||||
                            parseInt(
 | 
					                            )[0]
 | 
				
			||||||
                              showVersion
 | 
					                          : PID + ":N/A:N/A";
 | 
				
			||||||
                                .filter((line) =>
 | 
					                      let RAM =
 | 
				
			||||||
                                  line.includes("bytes of memory") || line.includes("bytes of physical memory")
 | 
					                        showVersion
 | 
				
			||||||
                                )
 | 
					                          .filter(
 | 
				
			||||||
                                .join("<br>")
 | 
					                            (line) =>
 | 
				
			||||||
                                .match(regexMemory)[0]
 | 
					                              line.includes("bytes of memory") ||
 | 
				
			||||||
                            ) /
 | 
					                              line.includes("bytes of physical memory")
 | 
				
			||||||
                            1024 /
 | 
					                          )
 | 
				
			||||||
                            1024
 | 
					                          .join("<br>")
 | 
				
			||||||
                          ).toFixed(2) + "G"
 | 
					                          .match(regexMemory) !== null
 | 
				
			||||||
                        : "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    let flash = showVersion
 | 
					 | 
				
			||||||
                      .filter((line) =>
 | 
					 | 
				
			||||||
                        line.toLocaleLowerCase().includes("compactflash")
 | 
					 | 
				
			||||||
                      )
 | 
					 | 
				
			||||||
                      .join("<br>");
 | 
					 | 
				
			||||||
                    listInformation.push({
 | 
					 | 
				
			||||||
                      PID: PID,
 | 
					 | 
				
			||||||
                      VID: VID,
 | 
					 | 
				
			||||||
                      SN: SN,
 | 
					 | 
				
			||||||
                      RAM: RAM,
 | 
					 | 
				
			||||||
                      flash:
 | 
					 | 
				
			||||||
                        flash.match(regexMemory) !== null
 | 
					 | 
				
			||||||
                          ? (
 | 
					                          ? (
 | 
				
			||||||
                              parseInt(flash.match(regexMemory)[0]) /
 | 
					                              parseInt(
 | 
				
			||||||
 | 
					                                showVersion
 | 
				
			||||||
 | 
					                                  .filter(
 | 
				
			||||||
 | 
					                                    (line) =>
 | 
				
			||||||
 | 
					                                      line.includes("bytes of memory") ||
 | 
				
			||||||
 | 
					                                      line.includes("bytes of physical memory")
 | 
				
			||||||
 | 
					                                  )
 | 
				
			||||||
 | 
					                                  .join("<br>")
 | 
				
			||||||
 | 
					                                  .match(regexMemory)[0]
 | 
				
			||||||
 | 
					                              ) /
 | 
				
			||||||
                              1024 /
 | 
					                              1024 /
 | 
				
			||||||
                              1024
 | 
					                              1024
 | 
				
			||||||
                            ).toFixed(2) + "G"
 | 
					                            ).toFixed(2) +
 | 
				
			||||||
                          : "",
 | 
					                            "G (D: " +
 | 
				
			||||||
                      extraItem: "no",
 | 
					                            memDefaultForPID.split(":")[1] +
 | 
				
			||||||
                    });
 | 
					                            ")"
 | 
				
			||||||
 | 
					                          : "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    html += `<tr style='background-color:${backgroundColor}'><td>${PID}</td>
 | 
					                      let flash = showVersion
 | 
				
			||||||
 | 
					                        .filter((line) =>
 | 
				
			||||||
 | 
					                          line.toLocaleLowerCase().includes("compactflash")
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                        .join("<br>");
 | 
				
			||||||
 | 
					                      listInformation.push({
 | 
				
			||||||
 | 
					                        PID: PID,
 | 
				
			||||||
 | 
					                        VID: VID,
 | 
				
			||||||
 | 
					                        SN: SN,
 | 
				
			||||||
 | 
					                        RAM: RAM,
 | 
				
			||||||
 | 
					                        flash:
 | 
				
			||||||
 | 
					                          flash.match(regexMemory) !== null
 | 
				
			||||||
 | 
					                            ? (
 | 
				
			||||||
 | 
					                                parseInt(flash.match(regexMemory)[0]) /
 | 
				
			||||||
 | 
					                                1024 /
 | 
				
			||||||
 | 
					                                1024
 | 
				
			||||||
 | 
					                              ).toFixed(2) +
 | 
				
			||||||
 | 
					                              "G (D: " +
 | 
				
			||||||
 | 
					                              memDefaultForPID.split(":")[2] +
 | 
				
			||||||
 | 
					                              ")"
 | 
				
			||||||
 | 
					                            : "",
 | 
				
			||||||
 | 
					                        extra_item: "no",
 | 
				
			||||||
 | 
					                      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      html += `<tr style='background-color:${backgroundColor}'><td>${PID}</td>
 | 
				
			||||||
                  <td>${VID}</td>
 | 
					                  <td>${VID}</td>
 | 
				
			||||||
                  <td>${SN}</td>
 | 
					                  <td>${SN}</td>
 | 
				
			||||||
                  <td>${RAM}</td>
 | 
					                  <td>${RAM}</td>
 | 
				
			||||||
| 
						 | 
					@ -214,100 +253,105 @@ export const sendDeviceInfora = async () => {
 | 
				
			||||||
                          parseInt(flash.match(regexMemory)[0]) /
 | 
					                          parseInt(flash.match(regexMemory)[0]) /
 | 
				
			||||||
                          1024 /
 | 
					                          1024 /
 | 
				
			||||||
                          1024
 | 
					                          1024
 | 
				
			||||||
                        ).toFixed(2) + "G"
 | 
					                        ).toFixed(2) +
 | 
				
			||||||
 | 
					                        "G (D: " +
 | 
				
			||||||
 | 
					                        memDefaultForPID.split(":")[2] +
 | 
				
			||||||
 | 
					                        ")"
 | 
				
			||||||
                      : ""
 | 
					                      : ""
 | 
				
			||||||
                  }</td>
 | 
					                  }</td>
 | 
				
			||||||
                  <td>no</td></tr>`;
 | 
					                  <td>no</td></tr>`;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                }
 | 
					                });
 | 
				
			||||||
              });
 | 
					              } else {
 | 
				
			||||||
            } else {
 | 
					                //show version not exists --> RAM = N/A, Flash = N/A
 | 
				
			||||||
              //show version not exists --> RAM = N/A, Flash = N/A
 | 
					                showInventoryContent.map((u, index) => {
 | 
				
			||||||
              showInventoryContent.map((u, index) => {
 | 
					                  const PID = u
 | 
				
			||||||
                const PID = u
 | 
					                    ?.split("VID:")[0]
 | 
				
			||||||
                  ?.split("VID:")[0]
 | 
					                    ?.split("PID:")[1]
 | 
				
			||||||
                  ?.split("PID:")[1]
 | 
					                    ?.replace(/,/g, "")
 | 
				
			||||||
                  ?.replace(/,/g, "")
 | 
					                    .trim();
 | 
				
			||||||
                  .trim();
 | 
					                  const VID = u
 | 
				
			||||||
                const VID = u
 | 
					                    ?.split("VID:")[1]
 | 
				
			||||||
                  ?.split("VID:")[1]
 | 
					                    ?.split("SN:")[0]
 | 
				
			||||||
                  ?.split("SN:")[0]
 | 
					                    ?.replace(/,/g, "")
 | 
				
			||||||
                  ?.replace(/,/g, "")
 | 
					                    .trim();
 | 
				
			||||||
                  .trim();
 | 
					                  const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
 | 
				
			||||||
                const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (index > 0) {
 | 
					                  if (index > 0) {
 | 
				
			||||||
                  if (PID !== "" && SN !== "") {
 | 
					                    if (PID !== "" && SN !== "") {
 | 
				
			||||||
                    listInformation.push({
 | 
					                      listInformation.push({
 | 
				
			||||||
                      PID: PID,
 | 
					                        PID: PID,
 | 
				
			||||||
                      VID: VID,
 | 
					                        VID: VID,
 | 
				
			||||||
                      SN: SN,
 | 
					                        SN: SN,
 | 
				
			||||||
                      RAM: "",
 | 
					                        RAM: "",
 | 
				
			||||||
                      flash: "",
 | 
					                        flash: "",
 | 
				
			||||||
                      extraItem: "yes",
 | 
					                        extra_item: "yes",
 | 
				
			||||||
                    });
 | 
					                      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    html += `<tr><td>${PID}</td>
 | 
					                      html += `<tr><td>${PID}</td>
 | 
				
			||||||
                  <td>${VID}</td>
 | 
					                  <td>${VID}</td>
 | 
				
			||||||
                  <td>${SN}</td>
 | 
					                  <td>${SN}</td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td>yes</td></tr>`;
 | 
					                  <td>yes</td></tr>`;
 | 
				
			||||||
                  }
 | 
					                    }
 | 
				
			||||||
                } else {
 | 
					                  } else {
 | 
				
			||||||
                  if (PID !== "" && SN !== "") {
 | 
					                    if (PID !== "" && SN !== "") {
 | 
				
			||||||
                    listInformation.push({
 | 
					                      listInformation.push({
 | 
				
			||||||
                      PID: PID,
 | 
					                        PID: PID,
 | 
				
			||||||
                      VID: VID,
 | 
					                        VID: VID,
 | 
				
			||||||
                      SN: SN,
 | 
					                        SN: SN,
 | 
				
			||||||
                      RAM: "",
 | 
					                        RAM: "",
 | 
				
			||||||
                      flash: "",
 | 
					                        flash: "",
 | 
				
			||||||
                      extraItem: "no",
 | 
					                        extra_item: "no",
 | 
				
			||||||
                    });
 | 
					                      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    html += `<tr style='background-color:${backgroundColor}'><td>${PID}</td>
 | 
					                      html += `<tr style='background-color:${backgroundColor}'><td>${PID}</td>
 | 
				
			||||||
                  <td>${VID}</td>
 | 
					                  <td>${VID}</td>
 | 
				
			||||||
                  <td>${SN}</td>
 | 
					                  <td>${SN}</td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td></td>
 | 
					                  <td></td>
 | 
				
			||||||
                  <td>no</td></tr>`;
 | 
					                  <td>no</td></tr>`;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                }
 | 
					                });
 | 
				
			||||||
              });
 | 
					              }
 | 
				
			||||||
            }
 | 
					            });
 | 
				
			||||||
          });
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      );
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setTimeout(() => {
 | 
					    setTimeout(async () => {
 | 
				
			||||||
      console.log(listInformation);
 | 
					      if (listInformation.length > 0) {
 | 
				
			||||||
      const options = {
 | 
					        console.log(listInformation);
 | 
				
			||||||
        from: "admin@apactech.io",
 | 
					        const options = {
 | 
				
			||||||
        to: "joseph@apactech.io",
 | 
					          from: "admin@apactech.io",
 | 
				
			||||||
        subject: "SN AUTO REPORT",
 | 
					          to: "joseph@apactech.io",
 | 
				
			||||||
        html:
 | 
					          subject: "SN AUTO REPORT",
 | 
				
			||||||
          "<table border='1'>\
 | 
					          html:
 | 
				
			||||||
          <thead>\
 | 
					            "<table border='1'>\
 | 
				
			||||||
              <tr>\
 | 
					            <thead>\
 | 
				
			||||||
                  <th>PID</th>\
 | 
					                <tr>\
 | 
				
			||||||
                  <th>VID</th>\
 | 
					                    <th>PID</th>\
 | 
				
			||||||
                  <th>SN</th>\
 | 
					                    <th>VID</th>\
 | 
				
			||||||
                  <th>RAM</th>\
 | 
					                    <th>SN</th>\
 | 
				
			||||||
                  <th>Flash</th>\
 | 
					                    <th>RAM</th>\
 | 
				
			||||||
                  <th>Extra Item</th>\
 | 
					                    <th>Flash</th>\
 | 
				
			||||||
              </tr>\
 | 
					                    <th>Extra Item</th>\
 | 
				
			||||||
          </thead>\
 | 
					                </tr>\
 | 
				
			||||||
          <tbody>" +
 | 
					            </thead>\
 | 
				
			||||||
          html +
 | 
					            <tbody>" +
 | 
				
			||||||
          "</tbody>\
 | 
					            html +
 | 
				
			||||||
      </table>",
 | 
					            "</tbody>\
 | 
				
			||||||
      };
 | 
					        </table>",
 | 
				
			||||||
      transporter.sendMail(options);
 | 
					        };
 | 
				
			||||||
    }, 5000);
 | 
					        transporter.sendMail(options);
 | 
				
			||||||
    // const match = "show inventory".match(regexInventory);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // console.log(match)
 | 
					        await InfoDevice.createMany(listInformation);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }, 5000);
 | 
				
			||||||
  } catch (error) {
 | 
					  } catch (error) {
 | 
				
			||||||
    console.log(error);
 | 
					    console.log(error);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					import BaseSchema from '@ioc:Adonis/Lucid/Schema'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class extends BaseSchema {
 | 
				
			||||||
 | 
					  protected tableName = 'info_devices'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public async up () {
 | 
				
			||||||
 | 
					    this.schema.createTable(this.tableName, (table) => {
 | 
				
			||||||
 | 
					      table.increments('id')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /**
 | 
				
			||||||
 | 
					       * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
 | 
				
			||||||
 | 
					       */
 | 
				
			||||||
 | 
					      table.timestamp('created_at', { useTz: true })
 | 
				
			||||||
 | 
					      table.timestamp('updated_at', { useTz: true })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public async down () {
 | 
				
			||||||
 | 
					    this.schema.dropTable(this.tableName)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue