From b06d575477826ea857e673251f39d07ae30ab96f Mon Sep 17 00:00:00 2001 From: Joseph Le Date: Tue, 10 Oct 2023 13:32:26 +1100 Subject: [PATCH 01/58] commit --- package-lock.json | 97 +++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 50 deletions(-) diff --git a/package-lock.json b/package-lock.json index cab53c1..004497e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1364,9 +1364,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", - "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==" + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" }, "node_modules/@types/pino": { "version": "6.3.12", @@ -2871,9 +2871,9 @@ "dev": true }, "node_modules/data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "engines": { "node": ">= 14" } @@ -4119,12 +4119,12 @@ } }, "node_modules/get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dependencies": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", + "data-uri-to-buffer": "^6.0.0", "debug": "^4.3.4", "fs-extra": "^8.1.0" }, @@ -4425,12 +4425,9 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "engines": { "node": ">= 0.4.0" } @@ -6360,9 +6357,12 @@ } }, "node_modules/on-exit-leak-free": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", - "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/on-finished": { "version": "2.4.1", @@ -6837,9 +6837,9 @@ } }, "node_modules/pino-pretty": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.0.tgz", - "integrity": "sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.2.tgz", + "integrity": "sha512-RvAdCQAU51MdVsJdvXX4Bipb52wwldXtOzlva1NT8q2d7tmgYWFIMLhoSnfx2Sr+Hi7BLGpR/n8wgrcq5G/ykA==", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", @@ -6861,9 +6861,9 @@ } }, "node_modules/pino-pretty/node_modules/sonic-boom": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.4.0.tgz", - "integrity": "sha512-zSe9QQW30nPzjkSJ0glFQO5T9lHsk39tz+2bAAwCj8CNgEG8ItZiX7Wb2ZgA8I04dwRGCcf1m3ABJa8AYm12Fw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.5.0.tgz", + "integrity": "sha512-02A0wEmj4d3aEIW/Sp6LMP1dNcG5cYmQPjhgtytIXa9tNmFZx3ragUPFmyBdgdM0yJJVSWwlLLEVHgrYfA0wtQ==", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -10359,9 +10359,9 @@ "dev": true }, "@types/node": { - "version": "20.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", - "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==" + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" }, "@types/pino": { "version": "6.3.12", @@ -11522,9 +11522,9 @@ "dev": true }, "data-uri-to-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", - "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==" }, "dateformat": { "version": "4.6.3", @@ -12477,12 +12477,12 @@ "dev": true }, "get-uri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", - "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "requires": { "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^5.0.1", + "data-uri-to-buffer": "^6.0.0", "debug": "^4.3.4", "fs-extra": "^8.1.0" }, @@ -12732,12 +12732,9 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==" }, "has-ansi": { "version": "2.0.0", @@ -14199,9 +14196,9 @@ } }, "on-exit-leak-free": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", - "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" }, "on-finished": { "version": "2.4.1", @@ -14579,9 +14576,9 @@ } }, "pino-pretty": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.0.tgz", - "integrity": "sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.2.2.tgz", + "integrity": "sha512-RvAdCQAU51MdVsJdvXX4Bipb52wwldXtOzlva1NT8q2d7tmgYWFIMLhoSnfx2Sr+Hi7BLGpR/n8wgrcq5G/ykA==", "requires": { "colorette": "^2.0.7", "dateformat": "^4.6.3", @@ -14600,9 +14597,9 @@ }, "dependencies": { "sonic-boom": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.4.0.tgz", - "integrity": "sha512-zSe9QQW30nPzjkSJ0glFQO5T9lHsk39tz+2bAAwCj8CNgEG8ItZiX7Wb2ZgA8I04dwRGCcf1m3ABJa8AYm12Fw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.5.0.tgz", + "integrity": "sha512-02A0wEmj4d3aEIW/Sp6LMP1dNcG5cYmQPjhgtytIXa9tNmFZx3ragUPFmyBdgdM0yJJVSWwlLLEVHgrYfA0wtQ==", "requires": { "atomic-sleep": "^1.0.0" } From 8c68313d839a7493a75afa78d8b0170e810cf944 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 19:59:37 +0700 Subject: [PATCH 02/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 732 +++++++++++++++++++++++++++++ package-lock.json | 12 + package.json | 1 + screenshot.js | 41 +- 4 files changed, 780 insertions(+), 6 deletions(-) create mode 100644 app/utils/sendStatusOtherSystem.js diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js new file mode 100644 index 0000000..1d261e4 --- /dev/null +++ b/app/utils/sendStatusOtherSystem.js @@ -0,0 +1,732 @@ +const axios = require("axios"); +const crypto = require("crypto"); +const moment = require("moment"); +const zulip = require("zulip-js"); + +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 = [ + { + 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", + }, + { + 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", + }, + { + 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: "Erp Sync Auto Test Log", + }, + { + 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", + }, + { + 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", + }, + { + 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", + }, + { + 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", + }, + { + 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", + }, + { + 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: ["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 FRF", + }, + { + 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: ["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 Sendle", + }, + ]; + + 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); + if (Array.isArray(response.data) === false) { + if (response.data.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } else { + if (Array.isArray(response.data.data) === false) { + const data = JSON.stringify( + response.data.data + ).toLocaleLowerCase(); + if (data.includes("error") || data.includes("invalid")) { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: JSON.stringify(response.data.data), + }); + } else { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } + } else { + if (response.data.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } else { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: JSON.stringify(response.data.data), + }); + } + } + } + } else { + if (response.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.length, + }); + } else { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: response.data, + }); + } + } + }) + .catch((error) => { + // Xử lý lỗi ở đây + console.log("Error:", error); + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: "Error: " + error, + }); + }); + } else { + 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); + if (Array.isArray(response.data) === false) { + if (response.data.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } else { + if (Array.isArray(response.data.data) === false) { + const data = JSON.stringify( + response.data.data + ).toLocaleLowerCase(); + if (data.includes("error") || data.includes("invalid")) { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: JSON.stringify(response.data.data), + }); + } else { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } + } else { + if (response.data.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.data.length, + }); + } else { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: JSON.stringify(response.data.data), + }); + } + } + } + } else { + if (response.data.length > 0) { + report.push({ + name: req.name, + status: ":check:", + code: response.status, + lengthOrData: response.data.length, + }); + } else { + report.push({ + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: response.data, + }); + } + } + }) + .catch((error) => { + // Xử lý lỗi ở đây + console.log("Error:", error); + report.push({ + name: req.name, + status: ":red_circle:", + code: error.status, + lengthOrData: "Error: " + error, + }); + }); + } + }); + + await Promise.all(promises); + report.map((u, index) => { + content += + "|" + + (index + 1) + + "|**" + + u.name + + "**|**" + + time + + "**|" + + u.status + + "|\n"; + }); + let params = { + type: "stream", + to: "networkToolBot", + topic: "System Logs", + content: JSON.stringify(report), + }; + + let params1 = { + type: "stream", + to: "Result test - auto.nswteam.net", + topic: "AU-dev", + content: content, + }; + + client.messages.send(params); + client.messages.send(params1); + console.log(report); + } catch (error) { + console.log(error); + if ( + JSON.stringify(error).includes( + "https://zulip.ipsupply.com.au/api/v1/messages failed" + ) + ) { + checkMultipleRequest(); + } + } +}; + +checkMultipleRequest(); diff --git a/package-lock.json b/package-lock.json index e8d3ef2..2e66931 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "axios": "^1.4.0", "child_process": "^1.0.2", "chokidar": "^3.5.3", + "crypto": "^1.0.1", "dotenv": "^16.3.1", "fs": "^0.0.1-security", "helpers": "^0.0.6", @@ -2860,6 +2861,12 @@ "node": "*" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/cuid": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", @@ -11520,6 +11527,11 @@ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, "cuid": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", diff --git a/package.json b/package.json index 2a1b2db..f1ff2c8 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "axios": "^1.4.0", "child_process": "^1.0.2", "chokidar": "^3.5.3", + "crypto": "^1.0.1", "dotenv": "^16.3.1", "fs": "^0.0.1-security", "helpers": "^0.0.6", diff --git a/screenshot.js b/screenshot.js index 10f0f01..817b50c 100644 --- a/screenshot.js +++ b/screenshot.js @@ -1,10 +1,39 @@ -const regex = /(\d+)K/g; +const axios = require('axios'); +const md5 = require('md5'); -console.log( - "1000944K bytes of ATA System CompactFlash 0 (Read/Write) " - .match(regex) - .map((obj) => (parseInt(obj.replace("K", ""))/1024/1024).toFixed(2)+"G") -); +// Tạo dữ liệu JSON bạn muốn gửi đi +const dataToSend = { + // Đặt dữ liệu của bạn ở đây +}; + +// Tạo tiêu đề +const headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'loginid': null, + 'Code': 'chuoi ngau nhiên', + 'AccessToken': md5(Code + '24feca0508b52d34b51db4b40964e7fff12edf71208a4607126f75cb5d504f7f') +}; + +// Gửi POST request bằng Axios +axios.post('https://disti.danielvu.com/api/sendBuyerOrderToERP', dataToSend, { headers }) + .then(response => { + // Xử lý response ở đây + console.log('Response:', response.data); + }) + .catch(error => { + // Xử lý lỗi ở đây + console.error('Error:', error); + }); + + +// const regex = /(\d+)K/g; + +// console.log( +// "1000944K bytes of ATA System CompactFlash 0 (Read/Write) " +// .match(regex) +// .map((obj) => (parseInt(obj.replace("K", ""))/1024/1024).toFixed(2)+"G") +// ); // let a = [1,2,3] From e199c6cd728cb171ba47efcdd8b19c8411bcf510 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 20:06:12 +0700 Subject: [PATCH 03/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 1d261e4..b58ba36 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -704,7 +704,7 @@ const checkMultipleRequest = async () => { type: "stream", to: "networkToolBot", topic: "System Logs", - content: JSON.stringify(report), + content: JSON.stringify(report, null, 2), }; let params1 = { From f1e3d33b6f9c4ba070e2796b62172eef47889f2e Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 20:09:34 +0700 Subject: [PATCH 04/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index b58ba36..19a8168 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -709,8 +709,8 @@ const checkMultipleRequest = async () => { let params1 = { type: "stream", - to: "Result test - auto.nswteam.net", - topic: "AU-dev", + to: "System Logs", + topic: "stream events", content: content, }; From a7fb41f4d780c24f044c00a980bb7a24e9bcbbc0 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 20:11:12 +0700 Subject: [PATCH 05/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 19a8168..b58ba36 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -709,8 +709,8 @@ const checkMultipleRequest = async () => { let params1 = { type: "stream", - to: "System Logs", - topic: "stream events", + to: "Result test - auto.nswteam.net", + topic: "AU-dev", content: content, }; From 087273a68be8a61368d5318982f01dd6f7bded32 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 20:20:38 +0700 Subject: [PATCH 06/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index b58ba36..19a8168 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -709,8 +709,8 @@ const checkMultipleRequest = async () => { let params1 = { type: "stream", - to: "Result test - auto.nswteam.net", - topic: "AU-dev", + to: "System Logs", + topic: "stream events", content: content, }; From ee2265d231f1c205f8e434c81971a922fe8e33f1 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 10 Oct 2023 20:41:47 +0700 Subject: [PATCH 07/58] update routes --- start/routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/start/routes.ts b/start/routes.ts index 0bded1c..d9c7401 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -287,5 +287,5 @@ Route.post("/api/sendMailInforDevice", async () => { } catch (error) { console.log(error) } -}) +}).middleware("checkToken") From c3ef9749a79c7ee9481d40f1bc763933c8f633a4 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 07:48:41 +0700 Subject: [PATCH 08/58] change mail test --- app/utils/sendDeviceInfor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts index c2f6074..1f5a8a6 100644 --- a/app/utils/sendDeviceInfor.ts +++ b/app/utils/sendDeviceInfor.ts @@ -328,7 +328,7 @@ export const sendDeviceInfora = async () => { console.log(listInformation); const options = { from: "admin@apactech.io", - to: "joseph@apactech.io, ips@ipsupply.com.au", + to: "joseph@apactech.io", subject: "(AUTO-REPORT) SERIAL NUMBER", html: "\ From c4e784d5688d505620387f53cf82d228eded9d2c Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 07:54:58 +0700 Subject: [PATCH 09/58] update emal ipsupply --- app/utils/sendDeviceInfor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts index 1f5a8a6..c2f6074 100644 --- a/app/utils/sendDeviceInfor.ts +++ b/app/utils/sendDeviceInfor.ts @@ -328,7 +328,7 @@ export const sendDeviceInfora = async () => { console.log(listInformation); const options = { from: "admin@apactech.io", - to: "joseph@apactech.io", + to: "joseph@apactech.io, ips@ipsupply.com.au", subject: "(AUTO-REPORT) SERIAL NUMBER", html: "
\ From bb8f38c6ecbb19cb9a5a7194b2a6f236d1049ea0 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:10:44 +0700 Subject: [PATCH 10/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 1488 ++++++++++++++++------------ 1 file changed, 855 insertions(+), 633 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 19a8168..986b3a7 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -2,6 +2,7 @@ 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", @@ -27,495 +28,814 @@ const checkMultipleRequest = async () => { 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: ["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 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: ["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 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: "https://disti.danielvu.com/api/sendSellerOrderToERP", - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - loginid: null, - Code: code, - AccessToken: accessToken, - }, + url: "ssh danielvu-gold@172.16.6.2 cat /home/danielvu-gold/htdocs/gold.danielvu.com/check_file.json", + method: "SSH", + headers: {}, data: {}, - name: "Erp Sync Order Ebay", - }, - { - 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", - }, - { - 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: "Erp Sync Auto Test Log", - }, - { - 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", - }, - { - 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", - }, - { - 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", - }, - { - 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", - }, - { - 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", - }, - { - 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: ["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 FRF", - }, - { - 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: ["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 Sendle", + 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 (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 { + 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 @@ -523,78 +843,18 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - // console.log(response.data); + console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); - if (Array.isArray(response.data) === false) { - if (response.data.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } else { - if (Array.isArray(response.data.data) === false) { - const data = JSON.stringify( - response.data.data - ).toLocaleLowerCase(); - if (data.includes("error") || data.includes("invalid")) { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: JSON.stringify(response.data.data), - }); - } else { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } - } else { - if (response.data.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } else { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: JSON.stringify(response.data.data), - }); - } - } - } - } else { - if (response.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.length, - }); - } else { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: response.data, - }); - } - } + + 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, @@ -610,74 +870,13 @@ const checkMultipleRequest = async () => { // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); - if (Array.isArray(response.data) === false) { - if (response.data.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } else { - if (Array.isArray(response.data.data) === false) { - const data = JSON.stringify( - response.data.data - ).toLocaleLowerCase(); - if (data.includes("error") || data.includes("invalid")) { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: JSON.stringify(response.data.data), - }); - } else { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } - } else { - if (response.data.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.data.length, - }); - } else { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: JSON.stringify(response.data.data), - }); - } - } - } - } else { - if (response.data.length > 0) { - report.push({ - name: req.name, - status: ":check:", - code: response.status, - lengthOrData: response.data.length, - }); - } else { - report.push({ - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: response.data, - }); - } - } + 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, @@ -685,38 +884,61 @@ const checkMultipleRequest = async () => { }); }); } + + 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); - report.map((u, index) => { - content += - "|" + - (index + 1) + - "|**" + - u.name + - "**|**" + - time + - "**|" + - u.status + - "|\n"; - }); + 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: "networkToolBot", - topic: "System Logs", - content: JSON.stringify(report, null, 2), + 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, - }; + type: "stream", + to: "System Logs", + topic: "stream events", + content: content, + }; client.messages.send(params); - client.messages.send(params1); - console.log(report); + // client.messages.send(params1); + console.log(report.sort((a, b) => a.group.localeCompare(b.group))); } catch (error) { console.log(error); if ( From 3aff35bb15a80417306c6ae36de5434a44324432 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:23:03 +0700 Subject: [PATCH 11/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 113 ++++++++++++++++++----------- 1 file changed, 69 insertions(+), 44 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 986b3a7..632f718 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -69,7 +69,7 @@ const checkMultipleRequest = async () => { // }, // data: {}, // name: "Erp Sync Order Ebay", - // group: "Ebay Systems" + // group: "Ebay Systems", // }, // { // url: "https://disti.danielvu.com/api/sendBuyerOrderToERP", @@ -83,7 +83,7 @@ const checkMultipleRequest = async () => { // }, // data: {}, // name: "Erp Sync PO Ebay", - // group: "Ebay Systems" + // group: "Ebay Systems", // }, // //ERP Systems // { @@ -98,7 +98,7 @@ const checkMultipleRequest = async () => { // filter: {}, // }, // name: "Log SN to ERP", - // group: "ERP Systems" + // group: "ERP Systems", // }, // { // url: "https://int.ipsupply.com.au/api/transferGetData", @@ -459,11 +459,10 @@ const checkMultipleRequest = async () => { // countryCode: "AU", // }, // to: { - // streetLines: ["600 Terminal Dr"], - // city: "Louisville", - // stateOrProvinceCode: "KY", - // postalCode: "40209", - // countryCode: "US", + // streetLines: ["112 Munro St"], + // city: "South Melbourne", + // postalCode: "3205", + // countryCode: "AU", // }, // requestedPackageLineItems: [ // { @@ -524,11 +523,10 @@ const checkMultipleRequest = async () => { // countryCode: "AU", // }, // to: { - // streetLines: ["600 Terminal Dr"], - // city: "Louisville", - // stateOrProvinceCode: "KY", - // postalCode: "40209", - // countryCode: "US", + // streetLines: ["112 Munro St"], + // city: "South Melbourne", + // postalCode: "3205", + // countryCode: "AU", // }, // requestedPackageLineItems: [ // { @@ -764,14 +762,60 @@ const checkMultipleRequest = async () => { lengthOrData: response.data?.data?.length | response.data, }); } else { - if (Array.isArray(response.data.data) === false) { - const data = JSON.stringify( - response.data?.data - )?.toLocaleLowerCase(); + 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.data === undefined + response.data === undefined ) { report.push({ group: req.group, @@ -789,27 +833,6 @@ const checkMultipleRequest = async () => { 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 { @@ -861,7 +884,9 @@ const checkMultipleRequest = async () => { lengthOrData: "Error: " + error, }); }); - } else { + } + + if (req.method === "GET") { await axios .get(req.url, req.data, { headers: req.headers, @@ -885,17 +910,17 @@ const checkMultipleRequest = async () => { }); } - if(req.method === "SSH"){ + 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) + console.log(stdout); } else { - console.log(stderr) + console.log(stderr); } }); } From 1906560a7826a73b6bd2d322ed580b5ec909d808 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:41:20 +0700 Subject: [PATCH 12/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 52 +++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 632f718..29dcc0b 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -3,6 +3,7 @@ const crypto = require("crypto"); const moment = require("moment"); const zulip = require("zulip-js"); const { exec } = require("child_process"); +const fs = require('fs'); const config = { username: "networktool-bot@zulip.ipsupply.com.au", @@ -27,6 +28,8 @@ const checkMultipleRequest = async () => { "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2ludC5pcHN1cHBseS5jb20uYXUvYXBpL2xvZ2luIiwiaWF0IjoxNjg5ODYyNjAxLCJleHAiOjE3MjEzOTg2MDEsIm5iZiI6MTY4OTg2MjYwMSwianRpIjoiUElZVjNBM3ZPQVlMQ081SyIsInN1YiI6MSwicHJ2IjoiYzhlZTFmYzg5ZTc3NWVjNGM3Mzg2NjdlNWJlMTdhNTkwYjZkNDBmYyJ9.UcybIKMBjTAY9i0PfIDQMtqHyN72Ul0jC03ZDGLGpMI"; let content = "||Server| System time| Status \n|---|:---|:---|:---:\n"; // Tạo tiêu đề + + let allResponse = "" const requests = [ //Ebay Systems // { @@ -319,7 +322,7 @@ const checkMultipleRequest = async () => { // data: { // urlAPI: "/api/logistics/check-shipping-rates", // data: { - // courierName: "Courier Please", + // courierName: "CouriersPlease", // packageInfo: { // from: { // streetLines: ["8/4A Bachell Ave"], @@ -866,7 +869,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - console.log(response.data); + allResponse+=JSON.stringify(req.name+"\n"+response.data) // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -892,6 +895,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { + allResponse+=JSON.stringify(req.name+"\n"+response.data) // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -913,14 +917,49 @@ const checkMultipleRequest = async () => { if (req.method === "SSH") { exec(req.url, (error, stdout, stderr) => { if (error) { - // console.error(`Error executing command: ${error.message}`); + allResponse+=JSON.stringify(req.name+"\n"+error) + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: error.status, + lengthOrData: "Error: " + error, + }); return; } if (stdout !== "") { - console.log(stdout); + allResponse+=JSON.stringify(req.name+"\n"+stdout) + if(req.name==="Perthmint"){ + + if((stdout.toString().split("true").length-1)>1){ + report.push({ + group: req.group, + name: req.name, + status: ":check:", + code: "good", + lengthOrData: stdout, + }); + }else{ + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: stdout, + }); + } + + } } else { - console.log(stderr); + allResponse+=JSON.stringify(req.name+"\n"+stderr) + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: stderr, + }); } }); } @@ -963,6 +1002,9 @@ const checkMultipleRequest = async () => { client.messages.send(params); // client.messages.send(params1); + allResponse += report.sort((a, b) => a.group.localeCompare(b.group)).join("\n") + + fs.writeFileSync("/home/logs/logSystems.txt", allResponse) console.log(report.sort((a, b) => a.group.localeCompare(b.group))); } catch (error) { console.log(error); From f1ad5a7961ac7f92238bb8ba1ff233fab1bb5c32 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:43:39 +0700 Subject: [PATCH 13/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 29dcc0b..cffbb99 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -930,6 +930,7 @@ const checkMultipleRequest = async () => { if (stdout !== "") { allResponse+=JSON.stringify(req.name+"\n"+stdout) + console.log(stdout) if(req.name==="Perthmint"){ if((stdout.toString().split("true").length-1)>1){ @@ -952,6 +953,7 @@ const checkMultipleRequest = async () => { } } else { + console.log(stderr) allResponse+=JSON.stringify(req.name+"\n"+stderr) report.push({ group: req.group, From 908a0bd70b5cbdfa38168069d284e570baab68d1 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:44:38 +0700 Subject: [PATCH 14/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index cffbb99..292898a 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -930,9 +930,8 @@ const checkMultipleRequest = async () => { if (stdout !== "") { allResponse+=JSON.stringify(req.name+"\n"+stdout) - console.log(stdout) + console.log("stdout ", stdout) if(req.name==="Perthmint"){ - if((stdout.toString().split("true").length-1)>1){ report.push({ group: req.group, From b9aec0abd16a001409788fb405efda0a9fc0a4d4 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:45:43 +0700 Subject: [PATCH 15/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 292898a..f6643a8 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -931,6 +931,8 @@ const checkMultipleRequest = async () => { if (stdout !== "") { allResponse+=JSON.stringify(req.name+"\n"+stdout) console.log("stdout ", stdout) + console.log("req.name ", req.name) + console.log(req.name==="Perthmint") if(req.name==="Perthmint"){ if((stdout.toString().split("true").length-1)>1){ report.push({ From 62aacc1f6f8c2a142c427eb8537b9b53e2c17fa9 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:46:28 +0700 Subject: [PATCH 16/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index f6643a8..95944b8 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -933,6 +933,7 @@ const checkMultipleRequest = async () => { console.log("stdout ", stdout) console.log("req.name ", req.name) console.log(req.name==="Perthmint") + console.log(stdout.toString().split("true")) if(req.name==="Perthmint"){ if((stdout.toString().split("true").length-1)>1){ report.push({ From 3a71c7e333e13420a222159baf15f0ed652d4ddc Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:47:27 +0700 Subject: [PATCH 17/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 95944b8..17132d8 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -931,6 +931,7 @@ const checkMultipleRequest = async () => { if (stdout !== "") { allResponse+=JSON.stringify(req.name+"\n"+stdout) console.log("stdout ", stdout) + console.log(typeof stdout) console.log("req.name ", req.name) console.log(req.name==="Perthmint") console.log(stdout.toString().split("true")) From 1df5dad95c4b77090d1b0177f7454c7ca73d02a5 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:48:38 +0700 Subject: [PATCH 18/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 17132d8..cd7c9e9 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -934,7 +934,7 @@ const checkMultipleRequest = async () => { console.log(typeof stdout) console.log("req.name ", req.name) console.log(req.name==="Perthmint") - console.log(stdout.toString().split("true")) + console.log((stdout.toString().split("true").length-1)>1) if(req.name==="Perthmint"){ if((stdout.toString().split("true").length-1)>1){ report.push({ From c944e29c51c126b506d6952d29a48d8bc636d6c2 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:49:44 +0700 Subject: [PATCH 19/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index cd7c9e9..6b1ad0d 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -915,7 +915,7 @@ const checkMultipleRequest = async () => { } if (req.method === "SSH") { - exec(req.url, (error, stdout, stderr) => { + await exec(req.url, (error, stdout, stderr) => { if (error) { allResponse+=JSON.stringify(req.name+"\n"+error) report.push({ @@ -925,7 +925,6 @@ const checkMultipleRequest = async () => { code: error.status, lengthOrData: "Error: " + error, }); - return; } if (stdout !== "") { From 300bd5651f646a9e5ea1a84f81cdad06ed5d696b Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:58:18 +0700 Subject: [PATCH 20/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 97 +++++++++++++++--------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 6b1ad0d..767a2a0 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -862,6 +862,18 @@ const checkMultipleRequest = async () => { } }; + const runExec = (command) => { + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(error); + } else { + resolve(stdout); + } + }); + }); + } + const promises = requests.map(async (req, index) => { if (req.method === "POST") { await axios @@ -915,57 +927,46 @@ const checkMultipleRequest = async () => { } if (req.method === "SSH") { - await exec(req.url, (error, stdout, stderr) => { - if (error) { - allResponse+=JSON.stringify(req.name+"\n"+error) - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: error.status, - lengthOrData: "Error: " + error, - }); - } - if (stdout !== "") { - allResponse+=JSON.stringify(req.name+"\n"+stdout) - console.log("stdout ", stdout) - console.log(typeof stdout) - console.log("req.name ", req.name) - console.log(req.name==="Perthmint") - console.log((stdout.toString().split("true").length-1)>1) - if(req.name==="Perthmint"){ - if((stdout.toString().split("true").length-1)>1){ - report.push({ - group: req.group, - name: req.name, - status: ":check:", - code: "good", - lengthOrData: stdout, - }); - }else{ - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: stdout, - }); - } - + const stdout = await runExec(req.url); + if (stdout !== "") { + allResponse+=JSON.stringify(req.name+"\n"+stdout) + console.log("stdout ", stdout) + console.log(typeof stdout) + console.log("req.name ", req.name) + console.log(req.name==="Perthmint") + console.log((stdout.toString().split("true").length-1)>1) + if(req.name==="Perthmint"){ + if((stdout.toString().split("true").length-1)>1){ + report.push({ + group: req.group, + name: req.name, + status: ":check:", + code: "good", + lengthOrData: stdout, + }); + }else{ + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: stdout, + }); } - } else { - console.log(stderr) - allResponse+=JSON.stringify(req.name+"\n"+stderr) - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: stderr, - }); + } - }); + } else { + console.log(stderr) + allResponse+=JSON.stringify(req.name+"\n"+stderr) + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: stderr, + }); + } } }); From 9da130876203c447ce49de1f99c83265665dfd6a Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 15:59:47 +0700 Subject: [PATCH 21/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 1419 ++++++++++++++-------------- 1 file changed, 707 insertions(+), 712 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 767a2a0..de19f96 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -32,713 +32,713 @@ const checkMultipleRequest = async () => { let allResponse = "" 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: "CouriersPlease", - // 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: "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: "CouriersPlease", + 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", @@ -931,11 +931,6 @@ const checkMultipleRequest = async () => { const stdout = await runExec(req.url); if (stdout !== "") { allResponse+=JSON.stringify(req.name+"\n"+stdout) - console.log("stdout ", stdout) - console.log(typeof stdout) - console.log("req.name ", req.name) - console.log(req.name==="Perthmint") - console.log((stdout.toString().split("true").length-1)>1) if(req.name==="Perthmint"){ if((stdout.toString().split("true").length-1)>1){ report.push({ From 5f13f635326ad2807e6bba836b732d722cb8732a Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 16:23:15 +0700 Subject: [PATCH 22/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 82 ++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 16 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index de19f96..58bac28 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -3,7 +3,7 @@ const crypto = require("crypto"); const moment = require("moment"); const zulip = require("zulip-js"); const { exec } = require("child_process"); -const fs = require('fs'); +const fs = require("fs"); const config = { username: "networktool-bot@zulip.ipsupply.com.au", @@ -29,7 +29,7 @@ const checkMultipleRequest = async () => { let content = "||Server| System time| Status \n|---|:---|:---|:---:\n"; // Tạo tiêu đề - let allResponse = "" + let allResponse = ""; const requests = [ //Ebay Systems { @@ -723,6 +723,7 @@ const checkMultipleRequest = async () => { name: "Tracking CouriersPlease", group: "ERP Systems", }, + //Other system { url: "https://int.ipsupply.com.au/api/transferPostData", method: "POST", @@ -747,6 +748,20 @@ const checkMultipleRequest = async () => { name: "Perthmint", group: "Other Systems", }, + { + url: "https://disti.danielvu.com/api/fileAutoImportLog", + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + loginid: null, + Code: code, + AccessToken: accessToken, + }, + data: {}, + name: "Auto import Disti", + group: "Other Systems", + }, ]; const logicCheck = async (req, response) => { @@ -872,7 +887,7 @@ const checkMultipleRequest = async () => { } }); }); - } + }; const promises = requests.map(async (req, index) => { if (req.method === "POST") { @@ -881,12 +896,47 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse+=JSON.stringify(req.name+"\n"+response.data) + allResponse += JSON.stringify(req.name + "\n" + response.data); + console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); - logicCheck(req, response); + if (req.name !== "Auto import Disti") { + logicCheck(req, response); + } else { + console.log(response.data?.data?.length); + if (response.data?.data?.length > 0) { + response.data?.data?.map((u) => { + let name = req.name + " from " + u.data_name; + if (u.status === true) { + report.push({ + group: req.group, + name: name, + status: ":check:", + code: "good", + lengthOrData: response.data?.data, + }); + } else { + report.push({ + group: req.group, + name: name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + }); + } else { + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + } }) .catch((error) => { // Xử lý lỗi ở đây @@ -907,7 +957,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse+=JSON.stringify(req.name+"\n"+response.data) + allResponse += JSON.stringify(req.name + "\n" + response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -927,12 +977,11 @@ const checkMultipleRequest = async () => { } if (req.method === "SSH") { - const stdout = await runExec(req.url); if (stdout !== "") { - allResponse+=JSON.stringify(req.name+"\n"+stdout) - if(req.name==="Perthmint"){ - if((stdout.toString().split("true").length-1)>1){ + allResponse += JSON.stringify(req.name + "\n" + stdout); + if (req.name === "Perthmint") { + if (stdout.toString().split("true").length - 1 > 1) { report.push({ group: req.group, name: req.name, @@ -940,7 +989,7 @@ const checkMultipleRequest = async () => { code: "good", lengthOrData: stdout, }); - }else{ + } else { report.push({ group: req.group, name: req.name, @@ -949,11 +998,10 @@ const checkMultipleRequest = async () => { lengthOrData: stdout, }); } - } } else { - console.log(stderr) - allResponse+=JSON.stringify(req.name+"\n"+stderr) + console.log(stderr); + allResponse += JSON.stringify(req.name + "\n" + stderr); report.push({ group: req.group, name: req.name, @@ -1002,9 +1050,11 @@ const checkMultipleRequest = async () => { client.messages.send(params); // client.messages.send(params1); - allResponse += report.sort((a, b) => a.group.localeCompare(b.group)).join("\n") + allResponse += report + .sort((a, b) => a.group.localeCompare(b.group)) + .join("\n"); - fs.writeFileSync("/home/logs/logSystems.txt", allResponse) + fs.writeFileSync("/home/logs/logSystems.txt", allResponse); console.log(report.sort((a, b) => a.group.localeCompare(b.group))); } catch (error) { console.log(error); From 9669eab5694afc1c1f156a4dd9f584640069b756 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 16:33:28 +0700 Subject: [PATCH 23/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 33 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 58bac28..81a6a87 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -180,7 +180,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate Fedex", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -245,7 +245,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate DHL", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -310,7 +310,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate Transdirect", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -375,7 +375,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate Courier Please", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -440,7 +440,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate Auspost", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -504,7 +504,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate FRF", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -568,7 +568,7 @@ const checkMultipleRequest = async () => { }, }, name: "Shipping rate Sendle", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -585,7 +585,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking Fedex", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -602,7 +602,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking TNT", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -619,7 +619,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking UPS", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -636,7 +636,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking Auspost", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -653,7 +653,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking USPS", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -670,7 +670,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking StarTrack", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -687,7 +687,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking Sendle", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -704,7 +704,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking DHL", - group: "ERP Systems", + group: "Shipping System", }, { url: "https://int.ipsupply.com.au/api/transferPostData", @@ -721,7 +721,7 @@ const checkMultipleRequest = async () => { }, }, name: "Tracking CouriersPlease", - group: "ERP Systems", + group: "Shipping System", }, //Other system { @@ -1014,6 +1014,7 @@ const checkMultipleRequest = async () => { }); await Promise.all(promises); + let groupName = report?.sort((a, b) => a.group.localeCompare(b.group))[0] ?.group; let no = 0; From 06bf78e68ae12e86b6d5e6a16c014ab27b52b6d0 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 16:41:16 +0700 Subject: [PATCH 24/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 81a6a87..25f1774 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1014,13 +1014,13 @@ const checkMultipleRequest = async () => { }); await Promise.all(promises); - + let listShipping = report.filter((i)=>i.group==="Shipping System").sort((a, b) => a.group.localeCompare(b.group)) + report = report.filter((i)=>i.group!=="Shipping System").concat(listShipping).sort((a, b) => a.group.localeCompare(b.group)) 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) { @@ -1034,6 +1034,7 @@ const checkMultipleRequest = async () => { "|" + no + "|" + u.name + "|**" + time + "**|" + u.status + "|\n"; } }); + let params = { type: "stream", to: "Result test - auto.nswteam.net", From e7efbdcfdc12b378edcc62bcca5f624280ebcfb7 Mon Sep 17 00:00:00 2001 From: joseph le Date: Wed, 11 Oct 2023 16:49:40 +0700 Subject: [PATCH 25/58] Create function check status for other system --- app/utils/sendStatusOtherSystem.js | 38 +++++++++++++++++------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 25f1774..75eef5b 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1014,26 +1014,30 @@ const checkMultipleRequest = async () => { }); await Promise.all(promises); - let listShipping = report.filter((i)=>i.group==="Shipping System").sort((a, b) => a.group.localeCompare(b.group)) - report = report.filter((i)=>i.group!=="Shipping System").concat(listShipping).sort((a, b) => a.group.localeCompare(b.group)) + let listShipping = report + .filter((i) => i.group === "Shipping System") + .sort((a, b) => a.group.localeCompare(b.group)); + report = report + .filter((i) => i.group !== "Shipping System") + .concat(listShipping) + .sort((a, b) => a.group.localeCompare(b.group)); let groupName = report?.sort((a, b) => a.group.localeCompare(b.group))[0] ?.group; let no = 0; content += "||**" + groupName + "**|||\n"; - report - ?.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"; - } - }); + report?.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", @@ -1051,7 +1055,7 @@ const checkMultipleRequest = async () => { }; client.messages.send(params); - // client.messages.send(params1); + client.messages.send(params1); allResponse += report .sort((a, b) => a.group.localeCompare(b.group)) .join("\n"); From e20aeccc2482f29df49ace34fd55365023d563a5 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:08:11 +0700 Subject: [PATCH 26/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 41 +++++++++++++++++++----------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 75eef5b..2584952 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -889,6 +889,23 @@ const checkMultipleRequest = async () => { }); }; + const sortArray = (data) => { + data.sort((a, b) => { + if (a.group === b.group) { + return a.name.localeCompare(b.name); + } + return a.group.localeCompare(b.group); + }); + + // Đưa group "Other Systems" xuống cuối + data.sort((a, b) => { + if (a.group === "Other Systems") return 1; + if (b.group === "Other Systems") return -1; + return 0; + }); + + return data + }; const promises = requests.map(async (req, index) => { if (req.method === "POST") { await axios @@ -896,7 +913,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += JSON.stringify(req.name + "\n" + response.data); + allResponse += JSON.stringify(req.name + "\n" + response.data, null, 2); console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); @@ -957,7 +974,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += JSON.stringify(req.name + "\n" + response.data); + allResponse += JSON.stringify(req.name + "\n" + response.data, null, 2); // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -979,7 +996,7 @@ const checkMultipleRequest = async () => { if (req.method === "SSH") { const stdout = await runExec(req.url); if (stdout !== "") { - allResponse += JSON.stringify(req.name + "\n" + stdout); + allResponse += JSON.stringify(req.name + "\n" + stdout, null, 2); if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { report.push({ @@ -1001,7 +1018,7 @@ const checkMultipleRequest = async () => { } } else { console.log(stderr); - allResponse += JSON.stringify(req.name + "\n" + stderr); + allResponse += JSON.stringify(req.name + "\n" + stderr, null, 2); report.push({ group: req.group, name: req.name, @@ -1014,18 +1031,12 @@ const checkMultipleRequest = async () => { }); await Promise.all(promises); - let listShipping = report - .filter((i) => i.group === "Shipping System") - .sort((a, b) => a.group.localeCompare(b.group)); - report = report - .filter((i) => i.group !== "Shipping System") - .concat(listShipping) - .sort((a, b) => a.group.localeCompare(b.group)); - let groupName = report?.sort((a, b) => a.group.localeCompare(b.group))[0] + + let groupName = sortArray(report)[0] ?.group; let no = 0; content += "||**" + groupName + "**|||\n"; - report?.map((u, index) => { + sortArray(report).map((u, index) => { no += 1; if (u.group === groupName) { content += @@ -1055,13 +1066,13 @@ const checkMultipleRequest = async () => { }; client.messages.send(params); - client.messages.send(params1); + // client.messages.send(params1); allResponse += report .sort((a, b) => a.group.localeCompare(b.group)) .join("\n"); fs.writeFileSync("/home/logs/logSystems.txt", allResponse); - console.log(report.sort((a, b) => a.group.localeCompare(b.group))); + console.log(sortArray(report)); } catch (error) { console.log(error); if ( From 2b39c5aa49b5799aa474c483e2a7c2fbf58a5f73 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:11:13 +0700 Subject: [PATCH 27/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 2584952..a42e03a 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -913,7 +913,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += JSON.stringify(req.name + "\n" + response.data, null, 2); + allResponse += req.name + "\n" + response.data console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); @@ -974,7 +974,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += JSON.stringify(req.name + "\n" + response.data, null, 2); + allResponse += req.name + "\n" + response.data // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -996,7 +996,7 @@ const checkMultipleRequest = async () => { if (req.method === "SSH") { const stdout = await runExec(req.url); if (stdout !== "") { - allResponse += JSON.stringify(req.name + "\n" + stdout, null, 2); + allResponse += req.name + "\n" + stdout if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { report.push({ @@ -1018,7 +1018,7 @@ const checkMultipleRequest = async () => { } } else { console.log(stderr); - allResponse += JSON.stringify(req.name + "\n" + stderr, null, 2); + allResponse += req.name + "\n" + stderr report.push({ group: req.group, name: req.name, From 311fb0e59ddd3b2fe80944a92de5dc9385607bc5 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:19:23 +0700 Subject: [PATCH 28/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index a42e03a..647643a 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -913,7 +913,8 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += req.name + "\n" + response.data + let responseDataString = JSON.stringify(req.name + "\n" + response.data, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; console.log(response.data); // Xử lý response ở đây // console.log("Response:", response.data.length); @@ -974,7 +975,8 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - allResponse += req.name + "\n" + response.data + let responseDataString = JSON.stringify(req.name + "\n" + response.data, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; // Xử lý response ở đây // console.log("Response:", response.data.length); // console.log("Status:", response.status); @@ -996,7 +998,8 @@ const checkMultipleRequest = async () => { if (req.method === "SSH") { const stdout = await runExec(req.url); if (stdout !== "") { - allResponse += req.name + "\n" + stdout + let responseDataString = JSON.stringify(req.name + "\n" + stdout, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { report.push({ @@ -1018,7 +1021,8 @@ const checkMultipleRequest = async () => { } } else { console.log(stderr); - allResponse += req.name + "\n" + stderr + let responseDataString = JSON.stringify(req.name + "\n" + stderr, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; report.push({ group: req.group, name: req.name, From 9c5b8b0cc53aafb672415ad76ce1b12dd3811462 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:22:06 +0700 Subject: [PATCH 29/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 647643a..0fa5e37 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -913,7 +913,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - let responseDataString = JSON.stringify(req.name + "\n" + response.data, null, 2); + let responseDataString = JSON.stringify(response.data, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; console.log(response.data); // Xử lý response ở đây @@ -975,7 +975,7 @@ const checkMultipleRequest = async () => { headers: req.headers, }) .then((response) => { - let responseDataString = JSON.stringify(req.name + "\n" + response.data, null, 2); + let responseDataString = JSON.stringify(response.data, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; // Xử lý response ở đây // console.log("Response:", response.data.length); @@ -998,7 +998,7 @@ const checkMultipleRequest = async () => { if (req.method === "SSH") { const stdout = await runExec(req.url); if (stdout !== "") { - let responseDataString = JSON.stringify(req.name + "\n" + stdout, null, 2); + let responseDataString = JSON.stringify(stdout, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { @@ -1020,8 +1020,8 @@ const checkMultipleRequest = async () => { } } } else { - console.log(stderr); - let responseDataString = JSON.stringify(req.name + "\n" + stderr, null, 2); + console.log(stdout); + let responseDataString = JSON.stringify(stdout, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; report.push({ group: req.group, From 3cefa60c310114487191e9585d65a3eeb5e35918 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:26:29 +0700 Subject: [PATCH 30/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 0fa5e37..9490e5b 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1071,9 +1071,9 @@ const checkMultipleRequest = async () => { client.messages.send(params); // client.messages.send(params1); - allResponse += report - .sort((a, b) => a.group.localeCompare(b.group)) - .join("\n"); + report.map((r)=>{ + allResponse += JSON.stringify(r, null, 2) + }) fs.writeFileSync("/home/logs/logSystems.txt", allResponse); console.log(sortArray(report)); From 56eab66e6949874611d8df8d667ee6c921ab53e7 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:31:30 +0700 Subject: [PATCH 31/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 9490e5b..5b93747 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1070,7 +1070,7 @@ const checkMultipleRequest = async () => { }; client.messages.send(params); - // client.messages.send(params1); + client.messages.send(params1); report.map((r)=>{ allResponse += JSON.stringify(r, null, 2) }) From e7cd378a8177b0b12739954a25344b82460894a1 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:45:58 +0700 Subject: [PATCH 32/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 39 +++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 5b93747..3ed0cff 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -762,6 +762,31 @@ const checkMultipleRequest = async () => { name: "Auto import Disti", group: "Other Systems", }, + //Test Log System + { + url: "nc -zv 172.16.7.13 8002", + method: "EXEC", + headers: {}, + data: {}, + name: "ATC to ERP", + group: "Test Log System", + }, + { + url: "nc -zv 172.16.7.13 5000", + method: "EXEC", + headers: {}, + data: {}, + name: "ATC worked", + group: "Test Log System", + }, + { + url: "nc -zv 172.16.6.23 7777", + method: "EXEC", + headers: {}, + data: {}, + name: "Read Test Log", + group: "Test Log System", + }, ]; const logicCheck = async (req, response) => { @@ -995,11 +1020,12 @@ const checkMultipleRequest = async () => { }); } - if (req.method === "SSH") { + if (req.method === "EXEC") { const stdout = await runExec(req.url); if (stdout !== "") { let responseDataString = JSON.stringify(stdout, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; + if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { report.push({ @@ -1019,6 +1045,17 @@ const checkMultipleRequest = async () => { }); } } + + if(req.group === "Test Log System"){ + report.push({ + group: req.group, + name: req.name, + status: ":check:", + code: "good", + lengthOrData: stdout, + }); + } + } else { console.log(stdout); let responseDataString = JSON.stringify(stdout, null, 2); From 91117998734b3491556755659dab09ce0062c363 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:49:36 +0700 Subject: [PATCH 33/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 3ed0cff..24e0654 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1107,7 +1107,7 @@ const checkMultipleRequest = async () => { }; client.messages.send(params); - client.messages.send(params1); + // client.messages.send(params1); report.map((r)=>{ allResponse += JSON.stringify(r, null, 2) }) From a4812848fc881d573095af62d1804b46605467b8 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:50:16 +0700 Subject: [PATCH 34/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 24e0654..defc0ce 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1065,7 +1065,7 @@ const checkMultipleRequest = async () => { name: req.name, status: ":red_circle:", code: "fail", - lengthOrData: stderr, + lengthOrData: stdout, }); } } From 59a2558ccfe9aa43afa2464c2f1901944f604045 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:52:40 +0700 Subject: [PATCH 35/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 1460 ++++++++++++++-------------- 1 file changed, 730 insertions(+), 730 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index defc0ce..d15ac73 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -32,736 +32,736 @@ const checkMultipleRequest = async () => { let allResponse = ""; 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "CouriersPlease", - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - { - 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: "Shipping System", - }, - //Other system - { - 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", - }, - { - url: "https://disti.danielvu.com/api/fileAutoImportLog", - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - loginid: null, - Code: code, - AccessToken: accessToken, - }, - data: {}, - name: "Auto import Disti", - group: "Other 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "CouriersPlease", + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // { + // 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: "Shipping System", + // }, + // //Other system + // { + // 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", + // }, + // { + // url: "https://disti.danielvu.com/api/fileAutoImportLog", + // method: "POST", + // headers: { + // "Content-Type": "application/json", + // Accept: "application/json", + // loginid: null, + // Code: code, + // AccessToken: accessToken, + // }, + // data: {}, + // name: "Auto import Disti", + // group: "Other Systems", + // }, //Test Log System { url: "nc -zv 172.16.7.13 8002", From b6f3fdbaadb193a1290909488130b129d326bdd3 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:53:45 +0700 Subject: [PATCH 36/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index d15ac73..afcaea7 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -908,7 +908,12 @@ const checkMultipleRequest = async () => { if (error) { reject(error); } else { - resolve(stdout); + if (stdout !== "") { + resolve(stdout); + } else { + resolve(stderr); + } + } }); }); From 7caba66d3791eb3b6afbe27c7f8ea1160e6ef0a3 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:56:31 +0700 Subject: [PATCH 37/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index afcaea7..7abe190 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -902,16 +902,20 @@ const checkMultipleRequest = async () => { } }; - const runExec = (command) => { + const runExec = (command, name) => { return new Promise((resolve, reject) => { exec(command, (error, stdout, stderr) => { if (error) { reject(error); } else { - if (stdout !== "") { + if(name === "Test Log System"){ + if (stdout !== "") { + resolve(stdout); + } else { + resolve(stderr); + } + }else{ resolve(stdout); - } else { - resolve(stderr); } } @@ -1026,7 +1030,7 @@ const checkMultipleRequest = async () => { } if (req.method === "EXEC") { - const stdout = await runExec(req.url); + const stdout = await runExec(req.url, req.group); if (stdout !== "") { let responseDataString = JSON.stringify(stdout, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; From d410d8c70e554be5a413c3601140a181f2d7a5d6 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:57:10 +0700 Subject: [PATCH 38/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 7abe190..0965ade 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -740,14 +740,14 @@ const checkMultipleRequest = async () => { // 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", - // }, + { + url: "ssh danielvu-gold@172.16.6.2 cat /home/danielvu-gold/htdocs/gold.danielvu.com/check_file.json", + method: "EXEC", + headers: {}, + data: {}, + name: "Perthmint", + group: "Other Systems", + }, // { // url: "https://disti.danielvu.com/api/fileAutoImportLog", // method: "POST", From 94a422519b4a6306de7fd6012cc5418544c3664d Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 08:57:51 +0700 Subject: [PATCH 39/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 1444 ++++++++++++++-------------- 1 file changed, 722 insertions(+), 722 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 0965ade..de42cff 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -32,714 +32,714 @@ const checkMultipleRequest = async () => { let allResponse = ""; 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "CouriersPlease", - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // { - // 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: "Shipping System", - // }, - // //Other system - // { - // 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: "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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "CouriersPlease", + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + { + 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: "Shipping System", + }, + //Other system + { + 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: "EXEC", @@ -748,20 +748,20 @@ const checkMultipleRequest = async () => { name: "Perthmint", group: "Other Systems", }, - // { - // url: "https://disti.danielvu.com/api/fileAutoImportLog", - // method: "POST", - // headers: { - // "Content-Type": "application/json", - // Accept: "application/json", - // loginid: null, - // Code: code, - // AccessToken: accessToken, - // }, - // data: {}, - // name: "Auto import Disti", - // group: "Other Systems", - // }, + { + url: "https://disti.danielvu.com/api/fileAutoImportLog", + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + loginid: null, + Code: code, + AccessToken: accessToken, + }, + data: {}, + name: "Auto import Disti", + group: "Other Systems", + }, //Test Log System { url: "nc -zv 172.16.7.13 8002", From ae8c0dea0860d86871fe8f30b1134ccd1c99c67e Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 09:00:06 +0700 Subject: [PATCH 40/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index de42cff..e028889 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1116,7 +1116,7 @@ const checkMultipleRequest = async () => { }; client.messages.send(params); - // client.messages.send(params1); + client.messages.send(params1); report.map((r)=>{ allResponse += JSON.stringify(r, null, 2) }) From 2a33901778cc69a7e7ce1938c0d23526d6ba0a58 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 10:10:20 +0700 Subject: [PATCH 41/58] update sendDeviceInfo follow model special and RAM, flash --- app/utils/sendDeviceInfor.ts | 534 +++++++++++++++++------------------ 1 file changed, 258 insertions(+), 276 deletions(-) diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts index c2f6074..078b013 100644 --- a/app/utils/sendDeviceInfor.ts +++ b/app/utils/sendDeviceInfor.ts @@ -14,10 +14,11 @@ export const sendDeviceInfora = async () => { const regexVersion = /sh.*? ver.*/; const regexMemory = /(\d+)K/g; const date = moment(Date.now()).format("YYYYMMDD"); - const memDefault = (await KeyValue.all()) + const allKeyValue = await KeyValue.all(); + const memDefault = allKeyValue .filter((i) => i.$attributes.key === "MEMORY_DEFAULT") .map((obj) => obj.$attributes.value); - const listInformation = []; + let listInformation = []; let dataFile = await LogDetectFile.all(); let html = ""; @@ -38,300 +39,283 @@ export const sendDeviceInfora = async () => { }); //Read file in listFile - await listFile.map(async (file) => { - fs.readFile( - Env.get("FOLDER_LOGS") + "/" + file, - "utf8", - async (err, data) => { - if (err) { - console.log(`Error reading file: ${err}`); - } else { - //Array line - const lines = data?.split("\n"); - const linesInventory = []; - let DBFileCheck = dataFile.filter( - (i) => i.$attributes.file_name === file - )[0]; - if (DBFileCheck !== undefined) { - if (lines.length > DBFileCheck?.$extras.last_check_SN) { - const DBFile = await LogDetectFile.find( - DBFileCheck?.$attributes.id_ldf - ); - - // console.log(DBFile) - - DBFile.last_check_SN = lines.length; - await DBFile.save(); - } + const filePromises = listFile.map((file, index) => { + return new Promise((resolve, reject) => { + fs.readFile( + Env.get("FOLDER_LOGS") + "/" + file, + "utf8", + async (err, data) => { + if (err) { + console.log(`Error reading file: ${err}`); } else { - await LogDetectFile.firstOrCreate( - { file_name: file }, - { file_name: file } - ); - - dataFile = await LogDetectFile.all(); - DBFileCheck = dataFile.filter( + //Array line + const lines = data?.split("\n"); + const linesInventory = []; + let DBFileCheck = dataFile.filter( (i) => i.$attributes.file_name === file )[0]; - } - - //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") + if (DBFileCheck !== undefined) { + if (lines.length > DBFileCheck?.$extras.last_check_SN) { + const DBFile = await LogDetectFile.find( + DBFileCheck?.$attributes.id_ldf ); - begin = end; - end = end + 4; - } else { - check = false; + + // console.log(DBFile) + + DBFile.last_check_SN = lines.length; + await DBFile.save(); } + } else { + await LogDetectFile.firstOrCreate( + { file_name: file }, + { file_name: file } + ); + + dataFile = await LogDetectFile.all(); + DBFileCheck = dataFile.filter( + (i) => i.$attributes.file_name === file + )[0]; } - const showInventoryContent = showInventory - .join("\n") - .split("\n") - .filter( - (i) => - i.includes("PID:") && - i.includes("VID:") && - i.includes("SN:") + //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] ); - //show version exists - if ( - deviceContent.filter( - (line) => line.match(regexVersion) !== null - ).length > 0 - ) { - const lineShowver = deviceContent.indexOf( + 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 - )[0] - ); - - const showVersion = deviceContent.slice( - lineShowver, - deviceContent.indexOf( + ).length > 0 + ) { + const lineShowver = deviceContent.indexOf( deviceContent.filter( - (line) => line.search("Configuration register") !== -1 + (line) => line.match(regexVersion) !== null )[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 !== "") { - listInformation.push({ - PID: PID, - VID: VID, - SN: SN, - RAM: "", - flash: "", - extra_item: "yes", - }); + const showVersion = deviceContent.slice( + lineShowver, + deviceContent.indexOf( + deviceContent.filter( + (line) => line.search("Configuration register") !== -1 + )[0] + ) + 1 + ); - html += ` - - - - - `; - } - } else { - if (PID !== "" && SN !== "") { - const memDefaultForPID = - memDefault.filter((i) => - PID.includes(i.split(":")[0]) - )[0] !== undefined - ? memDefault.filter((i) => - PID.includes(i.split(":")[0]) - )[0] - : PID + ":N/A:N/A"; - let RAM = - showVersion - .filter( - (line) => - line.includes("bytes of memory") || - line.includes("bytes of physical memory") - ) - .join("
") - .match(regexMemory) !== null - ? ( - parseInt( - showVersion - .filter( - (line) => - line.includes("bytes of memory") || - line.includes("bytes of physical memory") - ) - .join("
") - .match(regexMemory)[0] - ) / - 1024 / - 1024 - ).toFixed(2) + - "G (D: " + - memDefaultForPID.split(":")[1] + - ")" - : ""; - - let flash = showVersion - .filter((line) => - line.toLocaleLowerCase().includes("compactflash") - ) - .join("
"); - listInformation.push({ - PID: PID, - VID: VID, - SN: SN, - RAM: RAM, - flash: - flash.match(regexMemory) !== null + 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(); + if (index > 0) { + if (PID !== "" && SN !== "") { + listInformation.push({ + PID: PID, + VID: VID, + SN: SN, + RAM: "", + flash: "", + extra_item: "yes", + }); + } + } else { + if (PID !== "" && SN !== "") { + const memDefaultForPID = + memDefault.filter((i) => + PID.includes(i.split(":")[0]) + )[0] !== undefined + ? memDefault.filter((i) => + PID.includes(i.split(":")[0]) + )[0] + : PID + ":N/A:N/A"; + let RAM = + showVersion + .filter( + (line) => + line.includes("bytes of memory") || + line.includes("bytes of physical memory") + ) + .join("
") + .match(regexMemory) !== null ? ( - parseInt(flash.match(regexMemory)[0]) / + parseInt( + showVersion + .filter( + (line) => + line.includes("bytes of memory") || + line.includes( + "bytes of physical memory" + ) + ) + .join("
") + .match(regexMemory)[0] + ) / 1024 / 1024 ).toFixed(2) + "G (D: " + - memDefaultForPID.split(":")[2] + + memDefaultForPID.split(":")[1] + ")" - : "", - extra_item: "no", - }); + : ""; - html += ` - - - - - `; + let flash = showVersion + .filter((line) => + line.toLocaleLowerCase().includes("compactflash") + ) + .join("
"); + 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", + }); + } } - } - }); - } else { - //show version not exists --> RAM = N/A, Flash = N/A - 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(); + }); + } else { + //show version not exists --> RAM = N/A, Flash = N/A + 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(); - if (index > 0) { - if (PID !== "" && SN !== "") { - listInformation.push({ - PID: PID, - VID: VID, - SN: SN, - RAM: "", - flash: "", - extra_item: "yes", - }); - - html += ` - - - - - `; + if (index > 0) { + if (PID !== "" && SN !== "") { + listInformation.push({ + PID: PID, + VID: VID, + SN: SN, + RAM: "", + flash: "", + extra_item: "yes", + }); + } + } else { + if (PID !== "" && SN !== "") { + listInformation.push({ + PID: PID, + VID: VID, + SN: SN, + RAM: "", + flash: "", + extra_item: "no", + }); + } } - } else { - if (PID !== "" && SN !== "") { - listInformation.push({ - PID: PID, - VID: VID, - SN: SN, - RAM: "", - flash: "", - extra_item: "no", - }); - - html += ` - - - - - `; - } - } - }); - } - }); + }); + } + }); + } + resolve(0); } - } - ); + ); + }); }); - setTimeout(async () => { - if (listInformation.length > 0) { - console.log(listInformation); - const options = { - from: "admin@apactech.io", - to: "joseph@apactech.io, ips@ipsupply.com.au", - subject: "(AUTO-REPORT) SERIAL NUMBER", - html: - "
${PID}${VID}${SN}yes
${PID}${VID}${SN}${RAM}${ - flash.match(regexMemory) !== null - ? ( - parseInt(flash.match(regexMemory)[0]) / - 1024 / - 1024 - ).toFixed(2) + - "G (D: " + - memDefaultForPID.split(":")[2] + - ")" - : "" - }no
${PID}${VID}${SN}yes
${PID}${VID}${SN}no
\ + await Promise.all(filePromises); + if (listInformation.length > 0) { + console.log(listInformation); + let specialModel = allKeyValue + .filter((i) => i.key === "MODEL_SPECIAL") + .map((obj) => obj.$attributes.value); + listInformation = listInformation.filter( + (i) => + i.RAM !== "" || + i.flash !== "" || + specialModel.filter((m) => i.PID.includes(m)).length > 0 + ); + listInformation.map((inf) => { + html += ` + + + + + `; + }); + const options = { + from: "admin@apactech.io", + to: "joseph@apactech.io, ips@ipsupply.com.au", + // to: "joseph@apactech.io", + subject: "(AUTO-REPORT) SERIAL NUMBER", + html: + "
${inf.PID}${inf.VID}${inf.SN}${inf.RAM}${inf.flash}${inf.extra_item}
\ \ \ \ @@ -343,15 +327,13 @@ export const sendDeviceInfora = async () => { \ \ " + - html + - "\ + html + + "\
PID
", - }; - transporter.sendMail(options); - - await InfoDevice.createMany(listInformation); - } - }, 5000); + }; + transporter.sendMail(options); + await InfoDevice.createMany(listInformation); + } } catch (error) { console.log(error); } From 00cb88b5f4957e94f18452b379d100fa396b617d Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 10:28:35 +0700 Subject: [PATCH 42/58] update sendDeviceInfo follow model special and RAM, flash --- app/utils/sendDeviceInfor.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts index 078b013..632af4c 100644 --- a/app/utils/sendDeviceInfor.ts +++ b/app/utils/sendDeviceInfor.ts @@ -290,17 +290,18 @@ export const sendDeviceInfora = async () => { }); await Promise.all(filePromises); + let specialModel = allKeyValue + .filter((i) => i.key === "MODEL_SPECIAL") + .map((obj) => obj.$attributes.value); + listInformation = listInformation.filter( + (i) => + i.RAM !== "" || + i.flash !== "" || + specialModel.filter((m) => i.PID.includes(m)).length > 0 + ); if (listInformation.length > 0) { console.log(listInformation); - let specialModel = allKeyValue - .filter((i) => i.key === "MODEL_SPECIAL") - .map((obj) => obj.$attributes.value); - listInformation = listInformation.filter( - (i) => - i.RAM !== "" || - i.flash !== "" || - specialModel.filter((m) => i.PID.includes(m)).length > 0 - ); + listInformation.map((inf) => { html += `${inf.PID} ${inf.VID} @@ -311,8 +312,8 @@ export const sendDeviceInfora = async () => { }); const options = { from: "admin@apactech.io", - to: "joseph@apactech.io, ips@ipsupply.com.au", - // to: "joseph@apactech.io", + // to: "joseph@apactech.io, ips@ipsupply.com.au", + to: "joseph@apactech.io", subject: "(AUTO-REPORT) SERIAL NUMBER", html: "\ From 93164fbf35be4315fa122117197e5b4cdc6ed533 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 11:12:09 +0700 Subject: [PATCH 43/58] update sendDeviceInfo follow model special and RAM, flash --- app/utils/sendDeviceInfor.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts index 632af4c..8a78dc0 100644 --- a/app/utils/sendDeviceInfor.ts +++ b/app/utils/sendDeviceInfor.ts @@ -301,7 +301,6 @@ export const sendDeviceInfora = async () => { ); if (listInformation.length > 0) { console.log(listInformation); - listInformation.map((inf) => { html += ` @@ -334,6 +333,8 @@ export const sendDeviceInfora = async () => { }; transporter.sendMail(options); await InfoDevice.createMany(listInformation); + }else{ + console.log("listInformation", listInformation) } } catch (error) { console.log(error); From 63100fb113743658111ef2916b1dff8d091711c4 Mon Sep 17 00:00:00 2001 From: joseph le Date: Thu, 12 Oct 2023 13:41:55 +0700 Subject: [PATCH 44/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index e028889..afd111b 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -940,6 +940,7 @@ const checkMultipleRequest = async () => { return data }; + const promises = requests.map(async (req, index) => { if (req.method === "POST") { await axios @@ -1085,7 +1086,7 @@ const checkMultipleRequest = async () => { let groupName = sortArray(report)[0] ?.group; let no = 0; - content += "||**" + groupName + "**|||\n"; + content += "||:high_voltage:**" + groupName + "**|||\n"; sortArray(report).map((u, index) => { no += 1; if (u.group === groupName) { @@ -1094,7 +1095,7 @@ const checkMultipleRequest = async () => { } else { no = 1; groupName = u.group; - content += "||**" + groupName + "**|||\n"; + content += "||:high_voltage:**" + groupName + "**|||\n"; content += "|" + no + "|" + u.name + "|**" + time + "**|" + u.status + "|\n"; } From 411f135a7041a58915849f2eaca7b078d2b87136 Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 13 Oct 2023 10:03:39 +0700 Subject: [PATCH 45/58] delete img --- screenshot.png | Bin 104176 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 screenshot.png diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 450987785ea8b7f14bf5cf351a3dddd693cb2561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104176 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�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 L{2n%Q&CdS=((rl9 From 4696f155c4b5ca18ce32a0e2610e870b4462414f Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 13 Oct 2023 13:12:49 +0700 Subject: [PATCH 46/58] update trycatch runtime --- app/utils/runtimeCheckLogs.ts | 480 +++++++++++++++++----------------- 1 file changed, 242 insertions(+), 238 deletions(-) diff --git a/app/utils/runtimeCheckLogs.ts b/app/utils/runtimeCheckLogs.ts index 2b29ecd..f940abd 100644 --- a/app/utils/runtimeCheckLogs.ts +++ b/app/utils/runtimeCheckLogs.ts @@ -73,8 +73,8 @@ export async function runtimeCheckLogs(folderPath) { if ( filePath?.split(".")[filePath.split(".").length - 1] === "log" && filePath.split("/")[filePath.split("/").length - 1]?.split("-")[0] === - //localhost - // filePath.split("\\")[filePath.split("\\").length - 1]?.split("-")[0] === + //localhost + // filePath.split("\\")[filePath.split("\\").length - 1]?.split("-")[0] === moment(Date.now()).format("YYYYMMDD").toString() ) { //add information file to database @@ -99,86 +99,151 @@ export async function runtimeCheckLogs(folderPath) { // Watch for changes in the files listed async function watchFilesInList() { - //only check new file ---> fileList - fileList_old = new file - let listFileWatch = fileList - ?.filter((i) => fileList_old.includes(i) === false) - .map((file) => folderPath + "/" + file); - const watcher = chokidar.watch(listFileWatch, { - persistent: true, - usePolling: true, - interval: 300000, - }); + try { + //only check new file ---> fileList - fileList_old = new file + let listFileWatch = fileList + ?.filter((i) => fileList_old.includes(i) === false) + .map((file) => folderPath + "/" + file); + const watcher = chokidar.watch(listFileWatch, { + persistent: true, + usePolling: true, + interval: 300000, + }); - watcher.setMaxListeners(200); + watcher.setMaxListeners(200); - watcher.on("change", async (path) => { - // fs.watchFile(filePath,{ interval: 15000 }, - // async (eventType) => { - //check special item, extra RAM, error in log - const fileName = path.split("/")[path.split("/").length - 1]; - // const fileName = path.split("\\")[path.split("\\").length - 1]; - const filePath = path; - let lines = []; - const today = DateTime.now().toFormat("yyyy-MM-dd"); - let allFile = await LogDetectFile.query().whereRaw( - `DATE(created_at) = ?`, - [today] - ); - // let allReport = await LogReport.all(); - let allValue = await KeyValue.all(); - const allReport = await LogReport.query().whereRaw( - `DATE(created_at) = ?`, - [today] - ); + watcher.on("change", async (path) => { + // fs.watchFile(filePath,{ interval: 15000 }, + // async (eventType) => { + //check special item, extra RAM, error in log + const fileName = path.split("/")[path.split("/").length - 1]; + // const fileName = path.split("\\")[path.split("\\").length - 1]; + const filePath = path; + let lines = []; + const today = DateTime.now().toFormat("yyyy-MM-dd"); + let allFile = await LogDetectFile.query().whereRaw( + `DATE(created_at) = ?`, + [today] + ); + // let allReport = await LogReport.all(); + let allValue = await KeyValue.all(); + const allReport = await LogReport.query().whereRaw( + `DATE(created_at) = ?`, + [today] + ); - //get information file - let fileDetect = allFile?.filter( - (i) => i.$original.file_name === fileName - )[0]; + //get information file + let fileDetect = allFile?.filter( + (i) => i.$original.file_name === fileName + )[0]; - let logsDetect = allReport?.filter( - (i) => i.$original.id_file === fileDetect?.id_ldf - ); - //get the last line detected - let lastLine = Math.max(...logsDetect.map((obj) => obj.line)); + let logsDetect = allReport?.filter( + (i) => i.$original.id_file === fileDetect?.id_ldf + ); + //get the last line detected + let lastLine = Math.max(...logsDetect.map((obj) => obj.line)); - //get content file in local - let contentFile = await fs - .readFileSync(filePath) - .toString() - ?.split("\n"); + //get content file in local + let contentFile = await fs + .readFileSync(filePath) + .toString() + ?.split("\n"); - //get index SN and send to ERP + //get index SN and send to ERP - checkIndexSN(contentFile, lastLine, fileName); + checkIndexSN(contentFile, lastLine, fileName); - //get list item to check - let listKeyValues = allValue.filter( - (i) => - i.$original.key === "MODEL_SPECIAL" || - i.$original.key === "CATCH_FAULTY" - ); + //get list item to check + let listKeyValues = allValue.filter( + (i) => + i.$original.key === "MODEL_SPECIAL" || + i.$original.key === "CATCH_FAULTY" + ); - //get list exclude error - let listExcludeErr = allValue - .filter((i) => i.$original.key === "EXCLUDE_ERR") - .map((obj) => obj.$original.value); + //get list exclude error + let listExcludeErr = allValue + .filter((i) => i.$original.key === "EXCLUDE_ERR") + .map((obj) => obj.$original.value); - //get list item special - let listExtraItem = allValue - .filter((i) => i.$original.key === "MODEL_SPECIAL") - .map((obj) => obj.$original.value); + //get list item special + let listExtraItem = allValue + .filter((i) => i.$original.key === "MODEL_SPECIAL") + .map((obj) => obj.$original.value); - //Process file content - if (contentFile.length > 50000) { - for (let i = 0; i < contentFile.length; i += 1000) { - const chunk = contentFile.slice(i, i + 1000); + //Process file content + if (contentFile.length > 50000) { + for (let i = 0; i < contentFile.length; i += 1000) { + const chunk = contentFile.slice(i, i + 1000); - chunk.map(async (line, index) => { + chunk.map(async (line, index) => { + //check line the line with errors and exclude errors + listKeyValues + .map((obj) => obj.$original.value) + .map(async (value) => { + if ( + line.includes(value) && + listExcludeErr.filter((err) => line.includes(err)) + .length === 0 + ) { + let log = allFile?.filter( + (i) => i.$original.file_name === fileName + )[0]; + + let checkLog = allReport?.filter( + (report) => + report.$original.id_file === log?.id_ldf && + report.$original.line === index + 1 && + report.$original.detected_content === value + ); + + if (checkLog?.length === 0) { + await LogReport.create({ + detected_content: value, + line: index + 1, + id_file: log?.id_ldf, + }); + lines.push(index + 1); + } + } + + // if(checkSpecialVersion()) + }); + + if ( + checkSpecialVersion(line) !== "" && + listExcludeErr.filter((err) => line.includes(err)).length === + 0 + ) { + let checkVersion = checkSpecialVersion(line); + let log = allFile?.filter( + (i) => i.$original.file_name === fileName + )[0]; + + let checkLog = allReport?.filter( + (report) => + report.$original.id_file === log?.id_ldf && + report.$original.line === index + 1 && + report.$original.detected_content === checkVersion + ); + + if (checkLog?.length === 0) { + await LogReport.create({ + detected_content: checkVersion, + line: index + 1, + id_file: log?.id_ldf, + }); + lines.push(index + 1); + } + } + }); + } + } else { + contentFile.map(async (line, index) => { //check line the line with errors and exclude errors listKeyValues .map((obj) => obj.$original.value) .map(async (value) => { + // console.log({line:Array(line), value:Array(value)}) if ( line.includes(value) && listExcludeErr.filter((err) => line.includes(err)) @@ -235,189 +300,128 @@ export async function runtimeCheckLogs(folderPath) { } }); } - } else { - contentFile.map(async (line, index) => { - //check line the line with errors and exclude errors - listKeyValues - .map((obj) => obj.$original.value) - .map(async (value) => { - // console.log({line:Array(line), value:Array(value)}) - if ( - line.includes(value) && - listExcludeErr.filter((err) => line.includes(err)).length === - 0 - ) { - let log = allFile?.filter( - (i) => i.$original.file_name === fileName - )[0]; - let checkLog = allReport?.filter( - (report) => - report.$original.id_file === log?.id_ldf && - report.$original.line === index + 1 && - report.$original.detected_content === value - ); + //true: import log to log_report table, send report to Zulip + setTimeout(async () => { + if (lines.length === 0) { + console.log( + fileName + "has changed(" + contentFile.length + ") ---Good" + ); + } else { + console.log( + fileName + + "has changed(" + + contentFile.length + + ") ---SOS---" + + lines.length + ); + let allReport_new = await LogReport.query().whereRaw( + `DATE(created_at) = ?`, + [today] + ); - if (checkLog?.length === 0) { - await LogReport.create({ - detected_content: value, - line: index + 1, - id_file: log?.id_ldf, - }); - lines.push(index + 1); - } - } - - // if(checkSpecialVersion()) - }); - - if ( - checkSpecialVersion(line) !== "" && - listExcludeErr.filter((err) => line.includes(err)).length === 0 - ) { - let checkVersion = checkSpecialVersion(line); - let log = allFile?.filter( + let fileDetect = allFile?.filter( (i) => i.$original.file_name === fileName )[0]; - let checkLog = allReport?.filter( - (report) => - report.$original.id_file === log?.id_ldf && - report.$original.line === index + 1 && - report.$original.detected_content === checkVersion + let logsDetect = allReport_new?.filter( + (i) => i.$original.id_file === fileDetect?.id_ldf + ); + // console.log(logsDetect) + // await Database.rawQuery( + // "select * from log_reports where id_file = " + + // fileDetect?.id_ldf + // ); + //Get all report newest + let listReport = await getListLineByItem( + logsDetect + .map((obj) => obj.$original) + .filter((l) => l.line > lastLine) ); - if (checkLog?.length === 0) { - await LogReport.create({ - detected_content: checkVersion, - line: index + 1, - id_file: log?.id_ldf, + let content = + "| |Last updated at | Item/error | Line | Report \n|---|:---:|:---|:---|:-----------:\n"; + let spoiler = ""; + let issueFound = ""; + let important = [ + "Vxx", + "V00", + "(CAT3K_CAA-UNIVERSALK9-M), Version", + ]; + listReport.map((log, index) => { + let item = listExtraItem.includes(log.detected_content) + ? ":medal: **" + log.detected_content + "**" + : ":small_orange_diamond: " + log.detected_content; + + log.line?.map((line) => { + issueFound = + issueFound + + "\n`" + + line + + "` " + + contentFile[line - 1]?.replace( + log.detected_content, + "[" + + log.detected_content + + "](https://logs.danielvu.com/logs/" + + fileName + + "#" + + line + + ")" + ); }); - lines.push(index + 1); - } - } - }); - } - - //true: import log to log_report table, send report to Zulip - setTimeout(async () => { - if (lines.length === 0) { - console.log( - fileName + "has changed(" + contentFile.length + ") ---Good" - ); - } else { - console.log( - fileName + - "has changed(" + - contentFile.length + - ") ---SOS---" + - lines.length - ); - let allReport_new = await LogReport.query().whereRaw( - `DATE(created_at) = ?`, - [today] - ); - - let fileDetect = allFile?.filter( - (i) => i.$original.file_name === fileName - )[0]; - - let logsDetect = allReport_new?.filter( - (i) => i.$original.id_file === fileDetect?.id_ldf - ); - // console.log(logsDetect) - // await Database.rawQuery( - // "select * from log_reports where id_file = " + - // fileDetect?.id_ldf - // ); - //Get all report newest - let listReport = await getListLineByItem( - logsDetect - .map((obj) => obj.$original) - .filter((l) => l.line > lastLine) - ); - - let content = - "| |Last updated at | Item/error | Line | Report \n|---|:---:|:---|:---|:-----------:\n"; - let spoiler = ""; - let issueFound = ""; - let important = [ - "Vxx", - "V00", - "(CAT3K_CAA-UNIVERSALK9-M), Version", - ]; - listReport.map((log, index) => { - let item = listExtraItem.includes(log.detected_content) - ? ":medal: **" + log.detected_content + "**" - : ":small_orange_diamond: " + log.detected_content; - - log.line?.map((line) => { - issueFound = - issueFound + - "\n`" + - line + - "` " + - contentFile[line - 1]?.replace( - log.detected_content, - "[" + - log.detected_content + - "](https://logs.danielvu.com/logs/" + - fileName + - "#" + - line + - ")" - ); - }); - content = - content + - "|" + - (index + 1) + - "|**" + - moment(Date.now()).format("HH:mm - DD/MM") + - "**|" + - item + - "|" + - log.line + - "|[View](https://logs.danielvu.com/logs/" + - fileName + - "#" + - log.line + - ")\n"; - }); - - let icon = - important.filter((i) => content.includes(i)).length > 0 - ? "------------\n\n:no_entry: :no_entry:**" + + content = + content + + "|" + + (index + 1) + + "|**" + + moment(Date.now()).format("HH:mm - DD/MM") + + "**|" + + item + + "|" + + log.line + + "|[View](https://logs.danielvu.com/logs/" + fileName + - "**:no_entry: :no_entry:" - : "------------\n\n:warning: :warning: **" + fileName + "**"; - sendMessToZulip( - "stream", - Env.get("ZULIP_STREAM_ALERT"), - Env.get("ZULIP_TOPIC_ALERT"), - icon + - "\n\n" + - content + - "\n\n" + - spoiler + - "\n\n***Issue found:***\n" + - issueFound - ); - } - }, 3000); - // console.log(path + " change") - }); + "#" + + log.line + + ")\n"; + }); - watcher.on("error", (error) => { - console.error(`Watcher error: ${error}`); - }); - // await fileList.slice(0,40) - // ?.filter((i) => fileList_old.includes(i) === false) - // ?.forEach((fileName) => { - // //path file - // const filePath = `${folderPath}/${fileName}`; + let icon = + important.filter((i) => content.includes(i)).length > 0 + ? "------------\n\n:no_entry: :no_entry:**" + + fileName + + "**:no_entry: :no_entry:" + : "------------\n\n:warning: :warning: **" + fileName + "**"; + sendMessToZulip( + "stream", + Env.get("ZULIP_STREAM_ALERT"), + Env.get("ZULIP_TOPIC_ALERT"), + icon + + "\n\n" + + content + + "\n\n" + + spoiler + + "\n\n***Issue found:***\n" + + issueFound + ); + } + }, 3000); + }); - // }); + watcher.on("error", (error) => { + console.error(`Watcher error: ${error}`); + }); + // await fileList.slice(0,40) + // ?.filter((i) => fileList_old.includes(i) === false) + // ?.forEach((fileName) => { + // //path file + // const filePath = `${folderPath}/${fileName}`; + + // }); + } catch (error) { + console.log(error); + } } } catch (error) { console.log(error); From 16699e76755caa2dde53d779144f215c421a6d20 Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 13 Oct 2023 15:56:19 +0700 Subject: [PATCH 47/58] update trycatch runtime --- app/utils/sendStatusOtherSystem.js | 37 +++++++++++++++++++----------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index afd111b..2984c71 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -32,6 +32,20 @@ const checkMultipleRequest = async () => { let allResponse = ""; const requests = [ //Ebay Systems + { + url: "https://disti.danielvu.com/api/eBayCustomerLog", + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + loginid: null, + Code: code, + AccessToken: accessToken, + }, + data: {}, + name: "Ebay customer", + group: "Ebay Systems", + }, { url: "https://disti.danielvu.com/api/eBayNewItemLog", method: "POST", @@ -908,16 +922,15 @@ const checkMultipleRequest = async () => { if (error) { reject(error); } else { - if(name === "Test Log System"){ + if (name === "Test Log System") { if (stdout !== "") { resolve(stdout); } else { resolve(stderr); } - }else{ + } else { resolve(stdout); } - } }); }); @@ -938,7 +951,7 @@ const checkMultipleRequest = async () => { return 0; }); - return data + return data; }; const promises = requests.map(async (req, index) => { @@ -1034,7 +1047,7 @@ const checkMultipleRequest = async () => { const stdout = await runExec(req.url, req.group); if (stdout !== "") { let responseDataString = JSON.stringify(stdout, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; + allResponse += `${req.name}\n${responseDataString}\n\n`; if (req.name === "Perthmint") { if (stdout.toString().split("true").length - 1 > 1) { @@ -1056,7 +1069,7 @@ const checkMultipleRequest = async () => { } } - if(req.group === "Test Log System"){ + if (req.group === "Test Log System") { report.push({ group: req.group, name: req.name, @@ -1065,11 +1078,10 @@ const checkMultipleRequest = async () => { lengthOrData: stdout, }); } - } else { console.log(stdout); let responseDataString = JSON.stringify(stdout, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; + allResponse += `${req.name}\n${responseDataString}\n\n`; report.push({ group: req.group, name: req.name, @@ -1083,8 +1095,7 @@ const checkMultipleRequest = async () => { await Promise.all(promises); - let groupName = sortArray(report)[0] - ?.group; + let groupName = sortArray(report)[0]?.group; let no = 0; content += "||:high_voltage:**" + groupName + "**|||\n"; sortArray(report).map((u, index) => { @@ -1118,9 +1129,9 @@ const checkMultipleRequest = async () => { client.messages.send(params); client.messages.send(params1); - report.map((r)=>{ - allResponse += JSON.stringify(r, null, 2) - }) + report.map((r) => { + allResponse += JSON.stringify(r, null, 2); + }); fs.writeFileSync("/home/logs/logSystems.txt", allResponse); console.log(sortArray(report)); From 5e4d020e1dc334f82db47242910326107685ad2d Mon Sep 17 00:00:00 2001 From: joseph le Date: Mon, 16 Oct 2023 08:49:39 +0700 Subject: [PATCH 48/58] detect error --- app/utils/runtimeCheckLogs.ts | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/app/utils/runtimeCheckLogs.ts b/app/utils/runtimeCheckLogs.ts index f940abd..c61cd9f 100644 --- a/app/utils/runtimeCheckLogs.ts +++ b/app/utils/runtimeCheckLogs.ts @@ -196,6 +196,13 @@ export async function runtimeCheckLogs(folderPath) { report.$original.detected_content === value ); + if ( + log?.id_ldf === "" || + log?.id_ldf === null || + log?.id_ldf === undefined + ) { + console.log("ERROR CHECK ", fileName) + } if (checkLog?.length === 0) { await LogReport.create({ detected_content: value, @@ -218,7 +225,13 @@ export async function runtimeCheckLogs(folderPath) { let log = allFile?.filter( (i) => i.$original.file_name === fileName )[0]; - + if ( + log?.id_ldf === "" || + log?.id_ldf === null || + log?.id_ldf === undefined + ) { + console.log("ERROR CHECK ", fileName) + } let checkLog = allReport?.filter( (report) => report.$original.id_file === log?.id_ldf && @@ -252,7 +265,13 @@ export async function runtimeCheckLogs(folderPath) { let log = allFile?.filter( (i) => i.$original.file_name === fileName )[0]; - + if ( + log?.id_ldf === "" || + log?.id_ldf === null || + log?.id_ldf === undefined + ) { + console.log("ERROR CHECK ", fileName) + } let checkLog = allReport?.filter( (report) => report.$original.id_file === log?.id_ldf && @@ -281,7 +300,13 @@ export async function runtimeCheckLogs(folderPath) { let log = allFile?.filter( (i) => i.$original.file_name === fileName )[0]; - + if ( + log?.id_ldf === "" || + log?.id_ldf === null || + log?.id_ldf === undefined + ) { + console.log("ERROR CHECK ", fileName) + } let checkLog = allReport?.filter( (report) => report.$original.id_file === log?.id_ldf && From cd25aa7aae52b7135e8dd8f44f396db31750a505 Mon Sep 17 00:00:00 2001 From: joseph le Date: Mon, 16 Oct 2023 09:20:19 +0700 Subject: [PATCH 49/58] fix error: Field 'id_file' doesn't have a default value --- app/utils/runtimeCheckLogs.ts | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/app/utils/runtimeCheckLogs.ts b/app/utils/runtimeCheckLogs.ts index c61cd9f..a7e378d 100644 --- a/app/utils/runtimeCheckLogs.ts +++ b/app/utils/runtimeCheckLogs.ts @@ -102,7 +102,7 @@ export async function runtimeCheckLogs(folderPath) { try { //only check new file ---> fileList - fileList_old = new file let listFileWatch = fileList - ?.filter((i) => fileList_old.includes(i) === false) + ?.filter((i) => fileList_old.includes(i) === false && i.includes(".log")) .map((file) => folderPath + "/" + file); const watcher = chokidar.watch(listFileWatch, { persistent: true, @@ -213,7 +213,6 @@ export async function runtimeCheckLogs(folderPath) { } } - // if(checkSpecialVersion()) }); if ( @@ -256,7 +255,7 @@ export async function runtimeCheckLogs(folderPath) { listKeyValues .map((obj) => obj.$original.value) .map(async (value) => { - // console.log({line:Array(line), value:Array(value)}) + if ( line.includes(value) && listExcludeErr.filter((err) => line.includes(err)) @@ -352,11 +351,7 @@ export async function runtimeCheckLogs(folderPath) { let logsDetect = allReport_new?.filter( (i) => i.$original.id_file === fileDetect?.id_ldf ); - // console.log(logsDetect) - // await Database.rawQuery( - // "select * from log_reports where id_file = " + - // fileDetect?.id_ldf - // ); + //Get all report newest let listReport = await getListLineByItem( logsDetect @@ -437,13 +432,6 @@ export async function runtimeCheckLogs(folderPath) { watcher.on("error", (error) => { console.error(`Watcher error: ${error}`); }); - // await fileList.slice(0,40) - // ?.filter((i) => fileList_old.includes(i) === false) - // ?.forEach((fileName) => { - // //path file - // const filePath = `${folderPath}/${fileName}`; - - // }); } catch (error) { console.log(error); } From a362661fe9c85a20eb4bfc3e79e3844978ad77c7 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 17 Oct 2023 07:28:09 +0700 Subject: [PATCH 50/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 198 ++++++++++++++++++----------- 1 file changed, 122 insertions(+), 76 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 2984c71..f0d499d 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -956,91 +956,137 @@ const checkMultipleRequest = async () => { const promises = requests.map(async (req, index) => { if (req.method === "POST") { - await axios - .post(req.url, req.data, { - headers: req.headers, - }) - .then((response) => { - let responseDataString = JSON.stringify(response.data, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; - console.log(response.data); - // Xử lý response ở đây - // console.log("Response:", response.data.length); - // console.log("Status:", response.status); + let response = await axios.post(req.url, req.data, { + headers: req.headers, + }); - if (req.name !== "Auto import Disti") { - logicCheck(req, response); + let responseDataString = JSON.stringify(response.data, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; + console.log(response.data); + // Xử lý response ở đây + // console.log("Response:", response.data.length); + // console.log("Status:", response.status); + + if (response.data === "" && response.data !== undefined) { + if (req.name !== "Auto import Disti") { + logicCheck(req, response); + } else { + console.log(response.data?.data?.length); + if (response.data?.data?.length > 0) { + response.data?.data?.map((u) => { + let name = req.name + " from " + u.data_name; + if (u.status === true) { + report.push({ + group: req.group, + name: name, + status: ":check:", + code: "good", + lengthOrData: response.data?.data, + }); + } else { + report.push({ + group: req.group, + name: name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + }); } else { - console.log(response.data?.data?.length); - if (response.data?.data?.length > 0) { - response.data?.data?.map((u) => { - let name = req.name + " from " + u.data_name; - if (u.status === true) { - report.push({ - group: req.group, - name: name, - status: ":check:", - code: "good", - lengthOrData: response.data?.data, - }); - } else { - report.push({ - group: req.group, - name: name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } - }); - } else { - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); } - }) - .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, - }); + } + }else{ + console.log("Error:", error); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: "Error: " + error, }); + } + // .then((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) => { - let responseDataString = JSON.stringify(response.data, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; - // Xử lý response ở đây - // console.log("Response:", response.data.length); - // console.log("Status:", response.status); + let response = await axios.get(req.url, req.data, { + headers: req.headers, + }); + + let responseDataString = JSON.stringify(response.data, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; + console.log(response.data); + // Xử lý response ở đây + // console.log("Response:", response.data.length); + // console.log("Status:", response.status); + + if (response.data === "" && response.data !== undefined) { + if (req.name !== "Auto import Disti") { 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, - }); + } else { + console.log(response.data?.data?.length); + if (response.data?.data?.length > 0) { + response.data?.data?.map((u) => { + let name = req.name + " from " + u.data_name; + if (u.status === true) { + report.push({ + group: req.group, + name: name, + status: ":check:", + code: "good", + lengthOrData: response.data?.data, + }); + } else { + report.push({ + group: req.group, + name: name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + }); + } else { + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + } + }else{ + console.log("Error:", error); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: "Error: " + error, }); + } } if (req.method === "EXEC") { From 445b0db0148bc2cc3e64b6a1d19063e4c3ac981a Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 17 Oct 2023 07:29:48 +0700 Subject: [PATCH 51/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index f0d499d..9d5fe60 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1004,13 +1004,13 @@ const checkMultipleRequest = async () => { } } }else{ - console.log("Error:", error); + console.log("Error:", response); report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, - lengthOrData: "Error: " + error, + lengthOrData: "Error: " + response, }); } // .then((response) => { @@ -1078,13 +1078,13 @@ const checkMultipleRequest = async () => { } } }else{ - console.log("Error:", error); + console.log("Error:", response); report.push({ group: req.group, name: req.name, status: ":red_circle:", code: response.status, - lengthOrData: "Error: " + error, + lengthOrData: "Error: " + response, }); } } From 6ccfa9717c37adff068980fad1beed9acb0b0930 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 17 Oct 2023 07:30:38 +0700 Subject: [PATCH 52/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 9d5fe60..1f7c4ef 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -967,7 +967,7 @@ const checkMultipleRequest = async () => { // console.log("Response:", response.data.length); // console.log("Status:", response.status); - if (response.data === "" && response.data !== undefined) { + if (response.data !== "" && response.data !== undefined) { if (req.name !== "Auto import Disti") { logicCheck(req, response); } else { @@ -1041,7 +1041,7 @@ const checkMultipleRequest = async () => { // console.log("Response:", response.data.length); // console.log("Status:", response.status); - if (response.data === "" && response.data !== undefined) { + if (response.data !== "" && response.data !== undefined) { if (req.name !== "Auto import Disti") { logicCheck(req, response); } else { From 0f3748cee1f444be999a44180290476254190f33 Mon Sep 17 00:00:00 2001 From: joseph le Date: Tue, 17 Oct 2023 07:34:37 +0700 Subject: [PATCH 53/58] Update function check status for other system --- app/utils/sendStatusOtherSystem.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 1f7c4ef..890620e 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -955,6 +955,7 @@ const checkMultipleRequest = async () => { }; const promises = requests.map(async (req, index) => { + try { if (req.method === "POST") { let response = await axios.post(req.url, req.data, { headers: req.headers, @@ -1137,6 +1138,16 @@ const checkMultipleRequest = async () => { }); } } + } catch (error) { + console.log("Error:", error); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "bad", + lengthOrData: "Error: " + error, + }); + } }); await Promise.all(promises); From 9747acb1c3b4cda1b4d3ed4528d1aa9426f602f3 Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 20 Oct 2023 07:49:49 +0700 Subject: [PATCH 54/58] update stream powerSchedule --- app/utils/powerSchedule.js | 4 ++-- app/utils/sendStatusOtherSystem.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/utils/powerSchedule.js b/app/utils/powerSchedule.js index 17d9134..36065d1 100644 --- a/app/utils/powerSchedule.js +++ b/app/utils/powerSchedule.js @@ -60,8 +60,8 @@ const zulip = require("zulip-js"); ) { let params = { type: "stream", - to: "Result test - auto.nswteam.net", - topic: "Lịch cúp điện", + to: "APAC Tech Bão", + topic: "Thông báo chung", content: ":warning: :date: :warning:\n\n" + tableData diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 890620e..390a0df 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -1011,7 +1011,7 @@ const checkMultipleRequest = async () => { name: req.name, status: ":red_circle:", code: response.status, - lengthOrData: "Error: " + response, + lengthOrData: "Error: " + JSON.stringify(response, null, 2), }); } // .then((response) => { @@ -1085,7 +1085,7 @@ const checkMultipleRequest = async () => { name: req.name, status: ":red_circle:", code: response.status, - lengthOrData: "Error: " + response, + lengthOrData: "Error: " + JSON.stringify(response, null, 2), }); } } @@ -1145,7 +1145,7 @@ const checkMultipleRequest = async () => { name: req.name, status: ":red_circle:", code: "bad", - lengthOrData: "Error: " + error, + lengthOrData: "Error: " + JSON.stringify(error, null, 2) }); } }); From d06d5c758627a3d32c3c9efdabd6041653838b5a Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 20 Oct 2023 09:11:56 +0700 Subject: [PATCH 55/58] update logAPI --- app/utils/Logger.ts | 42 +++++++++++++++++++++--------------------- start/routes.ts | 16 ++++++++++++---- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/app/utils/Logger.ts b/app/utils/Logger.ts index cffb2f8..dd27dd7 100644 --- a/app/utils/Logger.ts +++ b/app/utils/Logger.ts @@ -2,31 +2,31 @@ import fs from 'fs'; import moment from "moment"; -const shortenStringsInObject = (obj, maxLength) => { - // Kiểm tra nếu obj không phải là một đối tượng hoặc maxLength không phải là một số - if (typeof obj !== 'object' || typeof maxLength !== 'number') { - return obj; - } +// const shortenStringsInObject = (obj, maxLength) => { +// // Kiểm tra nếu obj không phải là một đối tượng hoặc maxLength không phải là một số +// if (typeof obj !== 'object' || typeof maxLength !== 'number') { +// return obj; +// } - // Duyệt qua các thuộc tính của đối tượng - for (const key in obj) { - if (obj.hasOwnProperty(key)) { - // Kiểm tra nếu thuộc tính là một chuỗi và độ dài của chuỗi lớn hơn maxLength - if (typeof obj[key] === 'string' && obj[key].length > maxLength) { - // Rút ngắn chuỗi lại maxLength ký tự - obj[key] = obj[key].substring(0, maxLength); - } - } - } +// // Duyệt qua các thuộc tính của đối tượng +// for (const key in obj) { +// if (obj.hasOwnProperty(key)) { +// // Kiểm tra nếu thuộc tính là một chuỗi và độ dài của chuỗi lớn hơn maxLength +// if (typeof obj[key] === 'string' && obj[key].length > maxLength) { +// // Rút ngắn chuỗi lại maxLength ký tự +// obj[key] = obj[key].substring(0, maxLength); +// } +// } +// } - if (Array.isArray(obj) && obj.length > 10) { - // Rút ngắn chuỗi lại maxLength ký tự - obj = "[Array:"+obj.length+"]\n"+obj.slice(0,15) - } +// if (Array.isArray(obj) && obj.length > 10) { +// // Rút ngắn chuỗi lại maxLength ký tự +// obj = "[Array:"+obj.length+"]\n"+obj.slice(0,15) +// } - return obj; - } +// return obj; +// } export function loggerAPI(req, res, location) { let old_data = ""; diff --git a/start/routes.ts b/start/routes.ts index d9c7401..daa7724 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -201,7 +201,9 @@ runtimeCheckLogs(Env.get("FOLDER_LOGS")); //ERP get index serial number Route.post("/api/getIndexSerialNumber", "ErpsController.getIndexSerialNumber") - .middleware("checkToken") + .middleware("checkToken").middleware( + "writeLog" + ); // .middleware("writeLog"); Route.post("/api/getParagraph", "ErpsController.getParagraph") @@ -210,9 +212,13 @@ Route.post("/api/getParagraph", "ErpsController.getParagraph") //Users -Route.post("/api/account/createUser", "UsersController.create"); +Route.post("/api/account/createUser", "UsersController.create").middleware( + "writeLog" +); -Route.post("/api/account/checkLogin", "UsersController.checkLogin"); +Route.post("/api/account/checkLogin", "UsersController.checkLogin").middleware( + "writeLog" +); //Log Route.get("/api/log/showLog/:name?", "LogsController.showLog").middleware( @@ -287,5 +293,7 @@ Route.post("/api/sendMailInforDevice", async () => { } catch (error) { console.log(error) } -}).middleware("checkToken") +}).middleware("checkToken").middleware( + "writeLog" +); From 1ea8092676cc5fa5a8c28eaed5ccead510877d31 Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 20 Oct 2023 09:36:43 +0700 Subject: [PATCH 56/58] update write for functions --- app/utils/addLogFunction.js | 34 +++ app/utils/addLogFunction.ts | 34 +++ app/utils/checkIndexSN.ts | 7 + app/utils/powerSchedule.js | 6 + app/utils/screenshot.png | Bin 311637 -> 0 bytes app/utils/sendDeviceInfor.ts | 16 +- app/utils/sendStatusOtherSystem.js | 355 +++++++++++++++-------------- 7 files changed, 276 insertions(+), 176 deletions(-) create mode 100644 app/utils/addLogFunction.js create mode 100644 app/utils/addLogFunction.ts delete mode 100644 app/utils/screenshot.png diff --git a/app/utils/addLogFunction.js b/app/utils/addLogFunction.js new file mode 100644 index 0000000..83571bd --- /dev/null +++ b/app/utils/addLogFunction.js @@ -0,0 +1,34 @@ +import fs from "fs"; +import moment from "moment"; + +export const addLogFunction = async (fileName, data, functionName) => { + try { + fs.exists(fileName, async (exists) => { + if (exists) { + let old_data = await fs.readFileSync(fileName, "utf8"); + fs.writeFileSync( + fileName, + old_data + + "\n\n[" + + moment(Date.now()).format("D/M/YY-HH:mm:ss") + + "] - " + + functionName + + "\n" + + data + + "\n\n======================================================================" + ); + } else { + fs.writeFileSync( + fileName, + "\n\n[" + + moment(Date.now()).format("D/M/YY-HH:mm:ss") + + "] - System Logs" + + data + + "\n\n======================================================================" + ); + } + }); + } catch (error) { + console.log(error); + } +}; diff --git a/app/utils/addLogFunction.ts b/app/utils/addLogFunction.ts new file mode 100644 index 0000000..83571bd --- /dev/null +++ b/app/utils/addLogFunction.ts @@ -0,0 +1,34 @@ +import fs from "fs"; +import moment from "moment"; + +export const addLogFunction = async (fileName, data, functionName) => { + try { + fs.exists(fileName, async (exists) => { + if (exists) { + let old_data = await fs.readFileSync(fileName, "utf8"); + fs.writeFileSync( + fileName, + old_data + + "\n\n[" + + moment(Date.now()).format("D/M/YY-HH:mm:ss") + + "] - " + + functionName + + "\n" + + data + + "\n\n======================================================================" + ); + } else { + fs.writeFileSync( + fileName, + "\n\n[" + + moment(Date.now()).format("D/M/YY-HH:mm:ss") + + "] - System Logs" + + data + + "\n\n======================================================================" + ); + } + }); + } catch (error) { + console.log(error); + } +}; diff --git a/app/utils/checkIndexSN.ts b/app/utils/checkIndexSN.ts index af7ae73..8847230 100644 --- a/app/utils/checkIndexSN.ts +++ b/app/utils/checkIndexSN.ts @@ -3,6 +3,8 @@ import Env from "@ioc:Adonis/Core/Env"; // import fs from "fs"; import axios from "axios"; +import { addLogFunction } from "./addLogFunction"; +import moment from "moment"; export const checkIndexSN = async (content, beginLine, nameF) => { try { @@ -195,6 +197,11 @@ export const checkIndexSN = async (content, beginLine, nameF) => { ); console.log(nameF + " response\n", response_int.data); + const fileName = + "./app/store/logsAPI/" + + moment(Date.now()).format("DD_MM_YYYY").toString() + + ".log"; + addLogFunction(fileName, "URL: https://int.ipsupply.com.au/api/transferPostData\n"+ response_int.data, "Update SN index to int.ipsupply.com.au"); } } } diff --git a/app/utils/powerSchedule.js b/app/utils/powerSchedule.js index 36065d1..4870ee5 100644 --- a/app/utils/powerSchedule.js +++ b/app/utils/powerSchedule.js @@ -1,5 +1,6 @@ const puppeteer = require("puppeteer"); const zulip = require("zulip-js"); +const { addLogFunction } = require("./addLogFunction"); (async () => { // Launch a headless browser @@ -72,4 +73,9 @@ const zulip = require("zulip-js"); client.messages.send(params); } }, 5000); + const fileName = + "./app/store/logsAPI/" + + moment(Date.now()).format("DD_MM_YYYY").toString() + + ".log"; + addLogFunction(fileName, JSON.stringify(params, null, 2), "powerSchedule") })(); diff --git a/app/utils/screenshot.png b/app/utils/screenshot.png deleted file mode 100644 index e567c3a6991ac0b006fb3092bf7629a6fce125af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311637 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 K*8<7A#wy~igSNO+sTuC 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

$^rOIiwDyu2 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

OA^wT8i(F> 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 { try { @@ -333,8 +334,19 @@ export const sendDeviceInfora = async () => { }; transporter.sendMail(options); await InfoDevice.createMany(listInformation); - }else{ - console.log("listInformation", listInformation) + const fileName = + "./app/store/logsAPI/" + + moment(Date.now()).format("DD_MM_YYYY").toString() + + ".log"; + + addLogFunction( + fileName, + JSON.stringify(listInformation[0], null, 2), + "Get-Send devices info" + ); + + } else { + console.log("listInformation", listInformation); } } catch (error) { console.log(error); diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index 390a0df..dcb7243 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -4,6 +4,7 @@ const moment = require("moment"); const zulip = require("zulip-js"); const { exec } = require("child_process"); const fs = require("fs"); +const { addLogFunction } = require("./addLogFunction"); const config = { username: "networktool-bot@zulip.ipsupply.com.au", @@ -955,149 +956,168 @@ const checkMultipleRequest = async () => { }; const promises = requests.map(async (req, index) => { - try { - if (req.method === "POST") { - let response = await axios.post(req.url, req.data, { - headers: req.headers, - }); - - let responseDataString = JSON.stringify(response.data, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; - console.log(response.data); - // Xử lý response ở đây - // console.log("Response:", response.data.length); - // console.log("Status:", response.status); - - if (response.data !== "" && response.data !== undefined) { - if (req.name !== "Auto import Disti") { - logicCheck(req, response); - } else { - console.log(response.data?.data?.length); - if (response.data?.data?.length > 0) { - response.data?.data?.map((u) => { - let name = req.name + " from " + u.data_name; - if (u.status === true) { - report.push({ - group: req.group, - name: name, - status: ":check:", - code: "good", - lengthOrData: response.data?.data, - }); - } else { - report.push({ - group: req.group, - name: name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } - }); - } else { - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } - } - }else{ - console.log("Error:", response); - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: "Error: " + JSON.stringify(response, null, 2), + try { + if (req.method === "POST") { + let response = await axios.post(req.url, req.data, { + headers: req.headers, }); - } - // .then((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") { - let response = await axios.get(req.url, req.data, { - headers: req.headers, - }); - - let responseDataString = JSON.stringify(response.data, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; - console.log(response.data); - // Xử lý response ở đây - // console.log("Response:", response.data.length); - // console.log("Status:", response.status); - - if (response.data !== "" && response.data !== undefined) { - if (req.name !== "Auto import Disti") { - logicCheck(req, response); - } else { - console.log(response.data?.data?.length); - if (response.data?.data?.length > 0) { - response.data?.data?.map((u) => { - let name = req.name + " from " + u.data_name; - if (u.status === true) { - report.push({ - group: req.group, - name: name, - status: ":check:", - code: "good", - lengthOrData: response.data?.data, - }); - } else { - report.push({ - group: req.group, - name: name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } - }); - } else { - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: response.data?.data, - }); - } - } - }else{ - console.log("Error:", response); - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: response.status, - lengthOrData: "Error: " + JSON.stringify(response, null, 2), - }); - } - } - - if (req.method === "EXEC") { - const stdout = await runExec(req.url, req.group); - if (stdout !== "") { - let responseDataString = JSON.stringify(stdout, null, 2); + let responseDataString = JSON.stringify(response.data, null, 2); allResponse += `${req.name}\n${responseDataString}\n\n`; + console.log(response.data); + // Xử lý response ở đây + // console.log("Response:", response.data.length); + // console.log("Status:", response.status); - if (req.name === "Perthmint") { - if (stdout.toString().split("true").length - 1 > 1) { + if (response.data !== "" && response.data !== undefined) { + if (req.name !== "Auto import Disti") { + logicCheck(req, response); + } else { + console.log(response.data?.data?.length); + if (response.data?.data?.length > 0) { + response.data?.data?.map((u) => { + let name = req.name + " from " + u.data_name; + if (u.status === true) { + report.push({ + group: req.group, + name: name, + status: ":check:", + code: "good", + lengthOrData: response.data?.data, + }); + } else { + report.push({ + group: req.group, + name: name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + }); + } else { + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + } + } else { + console.log("Error:", response); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: "Error: " + JSON.stringify(response, null, 2), + }); + } + // .then((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") { + let response = await axios.get(req.url, req.data, { + headers: req.headers, + }); + + let responseDataString = JSON.stringify(response.data, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; + console.log(response.data); + // Xử lý response ở đây + // console.log("Response:", response.data.length); + // console.log("Status:", response.status); + + if (response.data !== "" && response.data !== undefined) { + if (req.name !== "Auto import Disti") { + logicCheck(req, response); + } else { + console.log(response.data?.data?.length); + if (response.data?.data?.length > 0) { + response.data?.data?.map((u) => { + let name = req.name + " from " + u.data_name; + if (u.status === true) { + report.push({ + group: req.group, + name: name, + status: ":check:", + code: "good", + lengthOrData: response.data?.data, + }); + } else { + report.push({ + group: req.group, + name: name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + }); + } else { + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: response.data?.data, + }); + } + } + } else { + console.log("Error:", response); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: response.status, + lengthOrData: "Error: " + JSON.stringify(response, null, 2), + }); + } + } + + if (req.method === "EXEC") { + const stdout = await runExec(req.url, req.group); + if (stdout !== "") { + let responseDataString = JSON.stringify(stdout, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; + + if (req.name === "Perthmint") { + if (stdout.toString().split("true").length - 1 > 1) { + report.push({ + group: req.group, + name: req.name, + status: ":check:", + code: "good", + lengthOrData: stdout, + }); + } else { + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "fail", + lengthOrData: stdout, + }); + } + } + + if (req.group === "Test Log System") { report.push({ group: req.group, name: req.name, @@ -1105,49 +1125,30 @@ const checkMultipleRequest = async () => { code: "good", lengthOrData: stdout, }); - } else { - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: stdout, - }); } - } - - if (req.group === "Test Log System") { + } else { + console.log(stdout); + let responseDataString = JSON.stringify(stdout, null, 2); + allResponse += `${req.name}\n${responseDataString}\n\n`; report.push({ group: req.group, name: req.name, - status: ":check:", - code: "good", + status: ":red_circle:", + code: "fail", lengthOrData: stdout, }); } - } else { - console.log(stdout); - let responseDataString = JSON.stringify(stdout, null, 2); - allResponse += `${req.name}\n${responseDataString}\n\n`; - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "fail", - lengthOrData: stdout, - }); } + } catch (error) { + console.log("Error:", error); + report.push({ + group: req.group, + name: req.name, + status: ":red_circle:", + code: "bad", + lengthOrData: "Error: " + JSON.stringify(error, null, 2), + }); } - } catch (error) { - console.log("Error:", error); - report.push({ - group: req.group, - name: req.name, - status: ":red_circle:", - code: "bad", - lengthOrData: "Error: " + JSON.stringify(error, null, 2) - }); - } }); await Promise.all(promises); @@ -1189,8 +1190,14 @@ const checkMultipleRequest = async () => { report.map((r) => { allResponse += JSON.stringify(r, null, 2); }); + const fileName = + "./app/store/logsAPI/" + + moment(Date.now()).format("DD_MM_YYYY").toString() + + ".log"; - fs.writeFileSync("/home/logs/logSystems.txt", allResponse); + addLogFunction(fileName, allResponse, "System Logs") + + // fs.writeFileSync("/home/logs/logSystems.txt", allResponse); console.log(sortArray(report)); } catch (error) { console.log(error); From a6b9935ce1a91910c8e66cfe6c51894af83bf8ce Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 20 Oct 2023 09:38:14 +0700 Subject: [PATCH 57/58] update write for functions --- app/utils/addLogFunction.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/utils/addLogFunction.js b/app/utils/addLogFunction.js index 83571bd..532e3fb 100644 --- a/app/utils/addLogFunction.js +++ b/app/utils/addLogFunction.js @@ -1,5 +1,5 @@ -import fs from "fs"; -import moment from "moment"; +const fs = require("fs"); +const moment = require("moment"); export const addLogFunction = async (fileName, data, functionName) => { try { From 42785fe8b95a89badcafc80c5c7c9cf1f33ea908 Mon Sep 17 00:00:00 2001 From: joseph le Date: Fri, 20 Oct 2023 09:41:46 +0700 Subject: [PATCH 58/58] update write for functions --- app/utils/{addLogFunction.js => addLogFunctionJS.js} | 4 +++- app/utils/powerSchedule.js | 2 +- app/utils/sendStatusOtherSystem.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) rename app/utils/{addLogFunction.js => addLogFunctionJS.js} (88%) diff --git a/app/utils/addLogFunction.js b/app/utils/addLogFunctionJS.js similarity index 88% rename from app/utils/addLogFunction.js rename to app/utils/addLogFunctionJS.js index 532e3fb..c1519a7 100644 --- a/app/utils/addLogFunction.js +++ b/app/utils/addLogFunctionJS.js @@ -1,7 +1,7 @@ const fs = require("fs"); const moment = require("moment"); -export const addLogFunction = async (fileName, data, functionName) => { +const addLogFunction = async (fileName, data, functionName) => { try { fs.exists(fileName, async (exists) => { if (exists) { @@ -32,3 +32,5 @@ export const addLogFunction = async (fileName, data, functionName) => { console.log(error); } }; + +module.exports.addLogFunction = addLogFunction; \ No newline at end of file diff --git a/app/utils/powerSchedule.js b/app/utils/powerSchedule.js index 4870ee5..dd82cf9 100644 --- a/app/utils/powerSchedule.js +++ b/app/utils/powerSchedule.js @@ -1,6 +1,6 @@ const puppeteer = require("puppeteer"); const zulip = require("zulip-js"); -const { addLogFunction } = require("./addLogFunction"); +const { addLogFunction } = require("./addLogFunctionJS"); (async () => { // Launch a headless browser diff --git a/app/utils/sendStatusOtherSystem.js b/app/utils/sendStatusOtherSystem.js index dcb7243..361d7aa 100644 --- a/app/utils/sendStatusOtherSystem.js +++ b/app/utils/sendStatusOtherSystem.js @@ -4,7 +4,7 @@ const moment = require("moment"); const zulip = require("zulip-js"); const { exec } = require("child_process"); const fs = require("fs"); -const { addLogFunction } = require("./addLogFunction"); +const { addLogFunction } = require("./addLogFunctionJS"); const config = { username: "networktool-bot@zulip.ipsupply.com.au",

${inf.PID} ${inf.VID}