diff --git a/app/Middleware/Logger.ts b/app/Middleware/Logger.ts new file mode 100644 index 0000000..e9cfd2d --- /dev/null +++ b/app/Middleware/Logger.ts @@ -0,0 +1,14 @@ +import type { HttpContextContract } from "@ioc:Adonis/Core/HttpContext"; +import { loggerAPI } from "App/utils/Logger"; + +export default class Logger { + public async handle( + { request, response }: HttpContextContract, + next: () => Promise + ) { + // code for middleware goes here. ABOVE THE NEXT CALL + await next(); + + loggerAPI(request, response, request.url()); + } +} diff --git a/app/store/logs/20230912-test-code.log b/app/store/logs/20230912-test-code.log deleted file mode 100644 index 8036394..0000000 --- a/app/store/logs/20230912-test-code.log +++ /dev/null @@ -1,37 +0,0 @@ -fdgdfg -fksdfk trace ak -Power Failure -ERROR: % Incomplete command -ERROR: % Incomplete command -sdfhskd ERROR PVDM3- invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -sdfhskd ERROR PVDM3- invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -sdfhskd ERROR PVDM3- invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shjkg -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shj -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shj -invalid |IOSXE_RP_NV-3-NV_ACCESS_FAIL|IOSXE_RP_NV-3- shj pak_debug_init sdh -abc -123 PVDM3- hui 800G2-POE-2 -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -123 PVDM3- hui 800G2-POE-2 -123 PVDM3- hui 800G2-POE-2 -dfgkfdjkhlfdhkhjjkhjgf -sdfsd DM3- hui 800G2-POE- -123 PVDM3- hui 800G2-POE-2 -800G2-POE-2 -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -800G2-POE-2 -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -800G2-POE-2 -anfasll ak shflks as klhfalk la EHWIC- fsjklfjkl -800G2-POE-2 -800G2-POE-2 \ No newline at end of file diff --git a/app/store/logs/20230918-TESTLOG.log b/app/store/logs/20230918-TESTLOG.log deleted file mode 100644 index 7b38ffb..0000000 --- a/app/store/logs/20230918-TESTLOG.log +++ /dev/null @@ -1,7 +0,0 @@ -adfasf -anfasll ak shflks as klhfalk la EHWIC- fsjl -123 PVDM3- hui 800G2-POE-2 -sdhgksd sjk hk error -abc 123 fail -abc 123 fail -sdhgksd sjk hk error \ No newline at end of file diff --git a/app/store/logs/20230919-TEST.log b/app/store/logs/20230919-TEST.log deleted file mode 100644 index 8483dc6..0000000 --- a/app/store/logs/20230919-TEST.log +++ /dev/null @@ -1,8 +0,0 @@ -adfasf -anfasll ak shflks as klhfalk la EHWIC- fsjl -123 PVDM3- hui 800G2-POE-2 -sdhgksd sjk hk error -abc 123 fail -abc 123 fail -sdhgksd sjk hk error -123 PVDM3- hui 800G2-POE-2 \ No newline at end of file diff --git a/app/utils/Logger.ts b/app/utils/Logger.ts new file mode 100644 index 0000000..95426cf --- /dev/null +++ b/app/utils/Logger.ts @@ -0,0 +1,59 @@ +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; + } + + // 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); + } + } + } + + return obj; + } + +export function loggerAPI(request, response, location) { + let old_data = ""; + let body = shortenStringsInObject(response.getBody(), 300) + try { + const fileName = + "./app/store/logsAPI/" + + moment(Date.now()).format("DD_MM_YYYY").toString() + + ".log"; + + let logInfo = + "\n\n[" + + moment(Date.now()).format("D/M/YY-HH:mm:ss") + + "] - " + + response.getStatus() + + " - " + + location + + "\n------------PAYLOAD-----------\n" + + JSON.stringify(request.all()) + + "\n--------------DATA-------------\n" + + JSON.stringify(body) + + "\n-------------------------------"; + + fs.exists(fileName, async (exists) => { + if (exists) { + old_data = await fs.readFileSync(fileName, "utf8"); + fs.writeFileSync(fileName, old_data + logInfo); + } else { + fs.writeFileSync(fileName, old_data + logInfo); + } + }); + + } catch (error) { + response.status(500).send("CAN'T WRITE LOG"); + } + } \ No newline at end of file diff --git a/start/kernel.ts b/start/kernel.ts index 72bd5c2..84823b8 100644 --- a/start/kernel.ts +++ b/start/kernel.ts @@ -41,4 +41,5 @@ Server.middleware.register([ */ Server.middleware.registerNamed({ checkToken: () => import('App/Middleware/CheckToken'), + writeLog: () => import('App/Middleware/Logger') }) diff --git a/start/routes.ts b/start/routes.ts index cd99fe5..275aae3 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -198,29 +198,32 @@ runtimeCheckLogs(Env.get("FOLDER_LOGS")); // }, 2000); //ERP get index serial number + Route.post( "/api/getIndexSerialNumber", "ErpsController.getIndexSerialNumber" -).middleware("checkToken"); +).middleware("checkToken").middleware("writeLog"); + Route.post("/api/getParagraph", "ErpsController.getParagraph").middleware( "checkToken" -); +).middleware("writeLog"); //Users -Route.post("/api/account/createUser", "UsersController.create"); -Route.post("/api/account/checkLogin", "UsersController.checkLogin"); +Route.post("/api/account/createUser", "UsersController.create").middleware("writeLog"); + +Route.post("/api/account/checkLogin", "UsersController.checkLogin").middleware("writeLog"); //Log -Route.get("/api/log/showLog/:name?", "LogsController.showLog"); +Route.get("/api/log/showLog/:name?", "LogsController.showLog").middleware("writeLog"); -Route.get("/api/getAllLogDetect", "LogsController.getAllLogDetect"); +Route.get("/api/getAllLogDetect", "LogsController.getAllLogDetect").middleware("writeLog"); //Key-Value -Route.post("/api/getKeyValue", "ValuesController.getKeyValue"); +Route.post("/api/getKeyValue", "ValuesController.getKeyValue").middleware("writeLog"); -Route.post("/api/deleteValue", "ValuesController.destroy"); +Route.post("/api/deleteValue", "ValuesController.destroy").middleware("writeLog"); -Route.post("/api/addValue", "ValuesController.create"); +Route.post("/api/addValue", "ValuesController.create").middleware("writeLog"); Route.post("/api/backupProduct", async ({ request, response }) => { try { @@ -228,25 +231,43 @@ Route.post("/api/backupProduct", async ({ request, response }) => { const res = await axios.post( "https://logs.danielvu.com/api/getIndexSerialNumber", { from: date, to: date }, - { headers: { Authorization: request.headers().authorization?.replace(/"/g, "") } } + { + headers: { + Authorization: request.headers().authorization?.replace(/"/g, ""), + }, + } ); - res.data.map((obj, index)=>{ + res.data.map((obj, index) => { res.data[index] = { - PID:res.data[index].PID, - SN:res.data[index].SN, - VID:res.data[index].VID, - line:res.data[index].line.join(","), - file:res.data[index].fileName, - warehouse:res.data[index].warehouse - } - }) - const addProduct = await Product.createMany(res.data) + PID: res.data[index].PID, + SN: res.data[index].SN, + VID: res.data[index].VID, + line: res.data[index].line.join(","), + file: res.data[index].fileName, + warehouse: res.data[index].warehouse, + }; + }); + const addProduct = await Product.createMany(res.data); // console.log(addProduct) - response.status(200).send("Add "+res.data.length+" success!"); - await sendMessToZulip("stream", "networkToolBot", "Log service", "Backup product "+date+" success with "+res.data.length+" products") + response.status(200).send("Add " + res.data.length + " success!"); + await sendMessToZulip( + "stream", + "networkToolBot", + "Log service", + "Backup product " + + date + + " success with " + + res.data.length + + " products" + ); } catch (error) { response.status(500).send(error); - await sendMessToZulip("stream", "networkToolBot", "Log service", "Backup product fail. Please check!") + await sendMessToZulip( + "stream", + "networkToolBot", + "Log service", + "Backup product fail. Please check!" + ); } -}); +}).middleware("writeLog");