const axios = require("axios"); const crypto = require("crypto"); const moment = require("moment"); const zulip = require("zulip-js"); const { exec } = require("child_process"); const config = { username: "networktool-bot@zulip.ipsupply.com.au", apiKey: "0jMAmOuhfLvBqKJikv5oAkyNM4RIEoAM", realm: "https://zulip.ipsupply.com.au", }; const checkMultipleRequest = async () => { try { let report = []; let time = moment(Date.now()).format("HH:mm - DD/MM"); const client = await zulip(config); const code = Math.random().toString(36).substring(2, 12); const secretString = code + "24feca0508b52d34b51db4b40964e7fff12edf71208a4607126f75cb5d504f7f"; const accessToken = crypto .createHash("md5") .update(secretString) .digest("hex"); const tokenInt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2ludC5pcHN1cHBseS5jb20uYXUvYXBpL2xvZ2luIiwiaWF0IjoxNjg5ODYyNjAxLCJleHAiOjE3MjEzOTg2MDEsIm5iZiI6MTY4OTg2MjYwMSwianRpIjoiUElZVjNBM3ZPQVlMQ081SyIsInN1YiI6MSwicHJ2IjoiYzhlZTFmYzg5ZTc3NWVjNGM3Mzg2NjdlNWJlMTdhNTkwYjZkNDBmYyJ9.UcybIKMBjTAY9i0PfIDQMtqHyN72Ul0jC03ZDGLGpMI"; let content = "||Server| System time| Status \n|---|:---|:---|:---:\n"; // Tạo tiêu đề const requests = [ //Ebay Systems // { // url: "https://disti.danielvu.com/api/eBayNewItemLog", // method: "POST", // headers: { // "Content-Type": "application/json", // Accept: "application/json", // loginid: null, // Code: code, // AccessToken: accessToken, // }, // data: {}, // name: "New item", // group: "Ebay Systems", // }, // { // url: "https://disti.danielvu.com/api/eBayChatLog", // method: "POST", // headers: { // "Content-Type": "application/json", // Accept: "application/json", // loginid: null, // Code: code, // AccessToken: accessToken, // }, // data: {}, // name: "Ebay message", // group: "Ebay Systems", // }, // { // url: "https://disti.danielvu.com/api/sendSellerOrderToERP", // method: "POST", // headers: { // "Content-Type": "application/json", // Accept: "application/json", // loginid: null, // Code: code, // AccessToken: accessToken, // }, // data: {}, // name: "Erp Sync Order Ebay", // group: "Ebay Systems", // }, // { // url: "https://disti.danielvu.com/api/sendBuyerOrderToERP", // method: "POST", // headers: { // "Content-Type": "application/json", // Accept: "application/json", // loginid: null, // Code: code, // AccessToken: accessToken, // }, // data: {}, // name: "Erp Sync PO Ebay", // group: "Ebay Systems", // }, // //ERP Systems // { // url: "https://int.ipsupply.com.au/api/transferGetData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/test-log-serial-number/sync-data", // filter: {}, // }, // name: "Log SN to ERP", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferGetData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/stock-model-serial/check-sn-cisco", // filter: {}, // }, // name: "SN Cisco to ERP", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "Fedex", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["600 Terminal Dr"], // city: "Louisville", // stateOrProvinceCode: "KY", // postalCode: "40209", // countryCode: "US", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate Fedex", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "DHL", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["600 Terminal Dr"], // city: "Louisville", // stateOrProvinceCode: "KY", // postalCode: "40209", // countryCode: "US", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate DHL", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "Transdirect", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["600 Terminal Dr"], // city: "Louisville", // stateOrProvinceCode: "KY", // postalCode: "40209", // countryCode: "US", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate Transdirect", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "Courier Please", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["600 Terminal Dr"], // city: "Louisville", // stateOrProvinceCode: "KY", // postalCode: "40209", // countryCode: "US", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate Courier Please", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "Auspost", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["600 Terminal Dr"], // city: "Louisville", // stateOrProvinceCode: "KY", // postalCode: "40209", // countryCode: "US", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate Auspost", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "FRF", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["112 Munro St"], // city: "South Melbourne", // postalCode: "3205", // countryCode: "AU", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate FRF", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { // courierName: "Sendle", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], // city: "Lidcombe", // stateOrProvinceCode: "", // postalCode: "2141", // countryCode: "AU", // }, // to: { // streetLines: ["112 Munro St"], // city: "South Melbourne", // postalCode: "3205", // countryCode: "AU", // }, // requestedPackageLineItems: [ // { // weight: { // value: 10, // units: "KG", // }, // dimensions: { // length: 2, // width: 3, // height: 4, // units: "CM", // }, // groupPackageCount: 1, // }, // ], // commodities: [ // { // description: "G6", // quantity: 2, // quantityUnits: "PCS", // unitPrice: { // amount: 10000, // currency: "USD", // }, // customsValue: { // amount: 10000, // currency: "USD", // }, // }, // ], // inforCreateFedex: { // pickupType: "CONTACT_FEDEX_TO_SCHEDULE", // }, // }, // }, // }, // name: "Shipping rate Sendle", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "782568904960", // type: "Fedex", // }, // }, // name: "Tracking Fedex", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "210865775", // type: "TNT", // }, // }, // name: "Tracking TNT", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "1Z94VTP30308384260", // type: "UPS", // }, // }, // name: "Tracking UPS", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "33FJV771376901000930306", // type: "Auspost", // }, // }, // name: "Tracking Auspost", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "9400111206203073428144", // type: "USPS", // }, // }, // name: "Tracking USPS", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "CVAZ00633255", // type: "StarTrack", // }, // }, // name: "Tracking StarTrack", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "S92C5DS", // type: "Sendle", // }, // }, // name: "Tracking Sendle", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "2334909695 ", // type: "DHL", // }, // }, // name: "Tracking DHL", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/logistics/check-tracking", // data: { // trackingNumber: "60508912001", // type: "CouriersPlease", // }, // }, // name: "Tracking CouriersPlease", // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferPostData", // method: "POST", // headers: { // "Content-Type": "application/json", // Authorization: "Bearer " + tokenInt, // }, // data: { // urlAPI: "/api/stock-model-serial/check-sn-list-cisco", // data: { // serialNumbers: ["FGL1716W349"], // }, // }, // name: "Check SN Cisco", // group: "Other Systems", // }, { url: "ssh danielvu-gold@172.16.6.2 cat /home/danielvu-gold/htdocs/gold.danielvu.com/check_file.json", method: "SSH", headers: {}, data: {}, name: "Perthmint", group: "Other Systems", }, ]; const logicCheck = async (req, response) => { try { if (Array.isArray(response.data) === false) { if ( (response.data.data !== undefined && response.data.data.length > 0) || (response.data !== undefined && response.data?.success) ) { report.push({ group: req.group, name: req.name, status: ":check:", code: response.status, lengthOrData: response.data?.data?.length | response.data, }); } else { if (response.data?.data !== undefined) { if (Array.isArray(response.data.data) === false) { const data = JSON.stringify( response.data?.data )?.toLocaleLowerCase(); if ( data?.includes("error") || data?.includes("invalid") || response.data.data === undefined ) { report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, lengthOrData: JSON.stringify(response.data?.data), }); } else { report.push({ group: req.group, name: req.name, status: ":check:", code: response.status, lengthOrData: response.data?.data?.length, }); } } else { if ( response.data?.data !== undefined && response.data?.data?.length > 0 ) { report.push({ group: req.group, name: req.name, status: ":check:", code: response.status, lengthOrData: response.data?.data?.length, }); } else { report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, lengthOrData: JSON.stringify(response.data?.data), }); } } } else { const data = JSON.stringify(response.data)?.toLocaleLowerCase(); if ( data?.includes("error") || data?.includes("invalid") || response.data === undefined ) { report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, lengthOrData: JSON.stringify(response.data?.data), }); } else { report.push({ group: req.group, name: req.name, status: ":check:", code: response.status, lengthOrData: response.data?.data?.length, }); } } } } else { if (response.data.length > 0) { report.push({ group: req.group, name: req.name, status: ":check:", code: response.status, lengthOrData: response.data.length, }); } else { report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, lengthOrData: response.data, }); } } } catch (error) { console.log("logic check: ", error); } }; const promises = requests.map(async (req, index) => { if (req.method === "POST") { await axios .post(req.url, req.data, { headers: req.headers, }) .then((response) => { console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); logicCheck(req, response); }) .catch((error) => { // Xử lý lỗi ở đây console.log("Error:", error); report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, lengthOrData: "Error: " + error, }); }); } if (req.method === "GET") { await axios .get(req.url, req.data, { headers: req.headers, }) .then((response) => { // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); logicCheck(req, response); }) .catch((error) => { // Xử lý lỗi ở đây console.log("Error:", error); report.push({ group: req.group, name: req.name, status: ":red_circle:", code: error.status, lengthOrData: "Error: " + error, }); }); } if (req.method === "SSH") { exec(req.url, (error, stdout, stderr) => { if (error) { // console.error(`Error executing command: ${error.message}`); return; } if (stdout !== "") { console.log(stdout); } else { console.log(stderr); } }); } }); await Promise.all(promises); let groupName = report?.sort((a, b) => a.group.localeCompare(b.group))[0] ?.group; let no = 0; content += "||**" + groupName + "**|||\n"; report .sort((a, b) => a.group.localeCompare(b.group)) ?.map((u, index) => { no += 1; if (u.group === groupName) { content += "|" + no + "|" + u.name + "|**" + time + "**|" + u.status + "|\n"; } else { no = 1; groupName = u.group; content += "||**" + groupName + "**|||\n"; content += "|" + no + "|" + u.name + "|**" + time + "**|" + u.status + "|\n"; } }); let params = { type: "stream", to: "Result test - auto.nswteam.net", topic: "AU-dev", content: content, // content: JSON.stringify(report, null, 2), }; let params1 = { type: "stream", to: "System Logs", topic: "stream events", content: content, }; client.messages.send(params); // client.messages.send(params1); console.log(report.sort((a, b) => a.group.localeCompare(b.group))); } catch (error) { console.log(error); if ( JSON.stringify(error).includes( "https://zulip.ipsupply.com.au/api/v1/messages failed" ) ) { checkMultipleRequest(); } } }; checkMultipleRequest();