273 lines
7.5 KiB
TypeScript
273 lines
7.5 KiB
TypeScript
import Env from "@ioc:Adonis/Core/Env";
|
|
import axios from "axios";
|
|
import { addLogFunction } from "./addLogFunction";
|
|
import moment from "moment";
|
|
|
|
type OutputItem = {
|
|
PID: string;
|
|
VID: string;
|
|
SN: string;
|
|
line: number[];
|
|
fileName: string;
|
|
warehouse: "US" | "AU";
|
|
};
|
|
|
|
export const checkIndexSN = async (
|
|
content: string[],
|
|
beginLine: number,
|
|
nameF: string
|
|
): Promise<void> => {
|
|
try {
|
|
const arrayLine = content;
|
|
const output: OutputItem[] = [];
|
|
|
|
if (!arrayLine) return;
|
|
|
|
for (let i = 0; i < arrayLine.length; i++) {
|
|
const line = arrayLine[i];
|
|
const SN = line
|
|
?.split("SN:")[1]
|
|
?.trim()
|
|
.replace(/[!@#$%^&*()_+{}\[\]:;<>,.?~\\/]/g, "");
|
|
|
|
// Pattern: PID + SN
|
|
if (
|
|
line.includes("PID:") &&
|
|
line.includes("SN:") &&
|
|
!line.includes("%") &&
|
|
SN &&
|
|
SN !== "N/A" &&
|
|
SN.length > 4 &&
|
|
i >= beginLine
|
|
) {
|
|
const existingIndex = output.findIndex((u) => u.SN === SN);
|
|
const PID = line?.split("VID:")[0]
|
|
?.slice(line?.split("VID:")[0]?.search("PID"))
|
|
?.split(":")[1]
|
|
?.split(",")[0]
|
|
?.trim() ?? "";
|
|
|
|
const VID = line?.split("SN:")[0]
|
|
?.split("VID:")[1]
|
|
?.split(",")[0]
|
|
?.trim() ?? "";
|
|
|
|
if (existingIndex !== -1) {
|
|
output[existingIndex].PID = PID;
|
|
output[existingIndex].VID = VID;
|
|
output[existingIndex].line.push(i + 1);
|
|
} else {
|
|
output.push({
|
|
PID,
|
|
VID,
|
|
SN: SN.includes(" ") ? SN.split(" ")[0] : SN,
|
|
line: [i + 1],
|
|
fileName: nameF,
|
|
warehouse:
|
|
(nameF.includes("-US") ||
|
|
nameF.includes(".US") ||
|
|
nameF.includes("US-")) &&
|
|
!nameF.includes("AUS")
|
|
? "US"
|
|
: "AU",
|
|
});
|
|
}
|
|
}
|
|
|
|
// Pattern: "Serial Number"
|
|
if (line.includes("Serial Number") && i >= beginLine) {
|
|
const rawSN = line.split("Serial Number")[1]?.split(":")[1]
|
|
?.replace("\r", "")
|
|
?.trim()
|
|
?.replace(/[!@#$%^&*()_+{}\[\]:;<>,.?~\\/]/g, "");
|
|
|
|
if (!rawSN) continue;
|
|
|
|
const SN = rawSN.includes(" ") ? rawSN.split(" ")[0] : rawSN;
|
|
|
|
const existing = output.find((u) => u.SN === SN);
|
|
if (existing) {
|
|
existing.line.push(i + 1);
|
|
} else {
|
|
output.push({
|
|
PID: "",
|
|
VID: "",
|
|
SN,
|
|
line: [i + 1],
|
|
fileName: nameF,
|
|
warehouse:
|
|
(nameF.includes("-US") ||
|
|
nameF.includes(".US") ||
|
|
nameF.includes("US-")) &&
|
|
!nameF.includes("AUS")
|
|
? "US"
|
|
: "AU",
|
|
});
|
|
}
|
|
}
|
|
|
|
//Vendor Serial (SN)
|
|
if (line.includes("Vendor Serial (SN)") && i >= beginLine) {
|
|
const rawSN = line.split("Vendor Serial (SN)")[1]?.split(":")[1]
|
|
?.replace("\r", "")
|
|
?.trim()
|
|
?.replace(/[!@#$%^&*()_+{}\[\]:;<>,.?~\\/]/g, "");
|
|
|
|
if (!rawSN) continue;
|
|
|
|
const SN = rawSN.includes(" ") ? rawSN.split(" ")[0] : rawSN;
|
|
|
|
const existing = output.find((u) => u.SN === SN);
|
|
if (existing) {
|
|
existing.line.push(i + 1);
|
|
} else {
|
|
output.push({
|
|
PID: "",
|
|
VID: "",
|
|
SN,
|
|
line: [i + 1],
|
|
fileName: nameF,
|
|
warehouse:
|
|
(nameF.includes("-US") ||
|
|
nameF.includes(".US") ||
|
|
nameF.includes("US-")) &&
|
|
!nameF.includes("AUS")
|
|
? "US"
|
|
: "AU",
|
|
});
|
|
}
|
|
}
|
|
|
|
//System serial num
|
|
if (line.includes("System serial num") && i >= beginLine) {
|
|
const rawSN = line.split("System serial num")[1]?.split(":")[1]
|
|
?.replace("\r", "")
|
|
?.trim()
|
|
?.replace(/[!@#$%^&*()_+{}\[\]:;<>,.?~\\/]/g, "");
|
|
|
|
if (!rawSN) continue;
|
|
|
|
const SN = rawSN.includes(" ") ? rawSN.split(" ")[0] : rawSN;
|
|
|
|
const existing = output.find((u) => u.SN === SN);
|
|
if (existing) {
|
|
existing.line.push(i + 1);
|
|
} else {
|
|
output.push({
|
|
PID: "",
|
|
VID: "",
|
|
SN,
|
|
line: [i + 1],
|
|
fileName: nameF,
|
|
warehouse:
|
|
(nameF.includes("-US") ||
|
|
nameF.includes(".US") ||
|
|
nameF.includes("US-")) &&
|
|
!nameF.includes("AUS")
|
|
? "US"
|
|
: "AU",
|
|
});
|
|
}
|
|
}
|
|
|
|
// Pattern: "Processor board ID"
|
|
if ((line.includes("Processor board ID") || line.includes("Processor Board ID")) && i >= beginLine ) {
|
|
const parts = line.split(" ");
|
|
const PBID = parts[parts.length - 1]
|
|
?.replace("\r", "")
|
|
?.trim()
|
|
?.replace(/[!@#$%^&*()_+{}\[\]:;<>,.?~\\/]/g, "");
|
|
|
|
if (!PBID || PBID.length < 8) continue;
|
|
|
|
const SN = PBID.includes(" ") ? PBID.split(" ")[0] : PBID;
|
|
|
|
const existing = output.find((u) => u.SN === SN);
|
|
if (existing) {
|
|
existing.line.push(i + 1);
|
|
} else {
|
|
output.push({
|
|
PID: "",
|
|
VID: "",
|
|
SN,
|
|
line: [i + 1],
|
|
fileName: nameF,
|
|
warehouse:
|
|
(nameF.includes("-US") ||
|
|
nameF.includes(".US") ||
|
|
nameF.includes("US-")) &&
|
|
!nameF.includes("AUS")
|
|
? "US"
|
|
: "AU",
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
const pattern = /[\x00-\x20\x7F]/g;
|
|
const invalidPIDItems = output.filter(
|
|
(i) => !i.PID.match(pattern)
|
|
);
|
|
|
|
|
|
const fileName =
|
|
"./app/store/logsAPI/" +
|
|
moment().format("DD_MM_YYYY") +
|
|
".log";
|
|
|
|
if (invalidPIDItems.length > 0) {
|
|
const tokenStage = Env.get("STAGE_TOKEN_REQUEST");
|
|
const tokenProd = Env.get("INT_TOKEN_REQUEST");
|
|
const data = {
|
|
data: invalidPIDItems,
|
|
urlAPI: "/api/test-log-serial-number/save-data",
|
|
};
|
|
|
|
// Try stage first
|
|
try {
|
|
const response_stage = await axios.post(
|
|
"https://stage.nswteam.net/api/transferPostData",
|
|
data,
|
|
{
|
|
headers: { Authorization: "Bearer " + tokenStage },
|
|
}
|
|
);
|
|
|
|
addLogFunction(
|
|
fileName,
|
|
"URL: https://stage.nswteam.net/api/transferPostData\n" +
|
|
JSON.stringify(response_stage?.data, null, 2),
|
|
"Update SN index to stage.nswteam.net"
|
|
);
|
|
} catch (e) {
|
|
console.error("Error sending to stage.nswteam.net:", JSON.stringify(e));
|
|
}
|
|
|
|
// If prod, send to int.ipsupply.com.au too
|
|
if (Env.get("RUN_ENV") === "prod") {
|
|
try {
|
|
const response_int = await axios.post(
|
|
"https://int.ipsupply.com.au/api/transferPostData",
|
|
data,
|
|
{
|
|
headers: { Authorization: "Bearer " + tokenProd },
|
|
}
|
|
);
|
|
|
|
console.log(nameF + " response\n", response_int.data);
|
|
addLogFunction(
|
|
fileName,
|
|
"URL: https://int.ipsupply.com.au/api/transferPostData\n" +
|
|
JSON.stringify(response_int.data, null, 2),
|
|
"Update SN index to int.ipsupply.com.au"
|
|
);
|
|
} catch (e) {
|
|
console.error("Error sending to int.ipsupply.com.au:", JSON.stringify(e));
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error("Can't connect to log server:", JSON.stringify(error));
|
|
}
|
|
};
|