diff --git a/package-lock.json b/package-lock.json index 5b49397..4c039c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,25 +10,25 @@ "license": "ISC", "dependencies": { "@elastic/elasticsearch": "^8.14.0", - "@tsoa/runtime": "^6.4.0", + "@tsoa/runtime": "^6.0.0", "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.2", - "fast-jwt": "^4.0.1", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "fast-jwt": "^3.3.2", "promise.any": "^2.0.6", - "reflect-metadata": "^0.2.2", - "swagger-ui-express": "^5.0.1", - "tsoa": "^6.4.0" + "reflect-metadata": "^0.2.1", + "swagger-ui-express": "^5.0.0", + "tsoa": "^6.0.1" }, "devDependencies": { "@types/cors": "^2.8.17", "@types/express": "^4.17.21", - "@types/node": "^20.14.10", + "@types/node": "^20.11.5", "@types/swagger-ui-express": "^4.1.6", - "nodemon": "^3.1.4", - "prettier": "^3.3.3", + "nodemon": "^3.0.3", + "prettier": "^3.2.2", "ts-node": "^10.9.2", - "typescript": "^5.5.3" + "typescript": "^5.3.3" } }, "node_modules/@cspotcode/source-map-support": { @@ -476,11 +476,11 @@ "dev": true }, "node_modules/@tsoa/cli": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-6.4.0.tgz", - "integrity": "sha512-cuKqIAJ33enhXejMb04P2JF/SZdM3WLFE9Qg8s2dOVOrLbbZGK3H85YSORif0unxbre02psXuUyl3FwWBt0/pQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-6.3.1.tgz", + "integrity": "sha512-KOlsShmAZ8Ju8KCkBFFzdURlGa9YNgf6gAvU6GwnOQl7mcvqvKMk8IDy2bcotpqNcabHo6fbkeExztF/n0Z0kg==", "dependencies": { - "@tsoa/runtime": "^6.4.0", + "@tsoa/runtime": "^6.3.0", "@types/multer": "^1.4.11", "fs-extra": "^11.2.0", "glob": "^10.3.10", @@ -524,9 +524,9 @@ } }, "node_modules/@tsoa/runtime": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@tsoa/runtime/-/runtime-6.4.0.tgz", - "integrity": "sha512-oiVVK++Svo8KMRVTfOQxtepPQRCpPh8bCmPpmNFePGZYJAtZ8XX1cm8Zs/v87dZZmNEooU6egj1G40ive/9phw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@tsoa/runtime/-/runtime-6.3.0.tgz", + "integrity": "sha512-9z/0ePKpSoYpUq1IJvihk4FcgpAkyMTEEl9oFLiL9p5SE86ndsGJdH3kt/IyqtD3wajPSykMRHlAidrGUyLuNQ==", "dependencies": { "@hapi/boom": "^10.0.1", "@hapi/hapi": "^21.3.3", @@ -1537,9 +1537,9 @@ } }, "node_modules/fast-jwt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-4.0.2.tgz", - "integrity": "sha512-uSG3osRm3QNEkoCMwQ25qVs+pxn0f1n4/WLE+BmKaQZSmwhFhkkimHw7MXIPprrEF01CbNI1wL/35LRvLMfn7g==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-3.3.3.tgz", + "integrity": "sha512-oS3P8bRI24oPLJUePt2OgF64FBQib5TlgHLFQxYNoHYEEZe0gU3cKjJAVqpB5XKV/zjxmq4Hzbk3fgfW/wRz8Q==", "dependencies": { "@lukeed/ms": "^2.0.1", "asn1.js": "^5.4.1", @@ -1547,7 +1547,7 @@ "mnemonist": "^0.39.5" }, "engines": { - "node": ">=16" + "node": ">=16 <22" } }, "node_modules/fill-range": { @@ -2281,12 +2281,15 @@ } }, "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", + "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "14 >=14.21 || 16 >=16.20 || >=18" + }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -2622,9 +2625,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -3184,9 +3187,9 @@ } }, "node_modules/ts-deepmerge": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-7.0.1.tgz", - "integrity": "sha512-JBFCmNenZdUCc+TRNCtXVM6N8y/nDQHAcpj5BlwXG/gnogjam1NunulB9ia68mnqYI446giMfpqeBFFkOleh+g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-7.0.0.tgz", + "integrity": "sha512-WZ/iAJrKDhdINv1WG6KZIGHrZDar6VfhftG1QJFpVbOYZMYJLJOvZOo1amictRXVdBXZIgBHKswMTXzElngprA==", "engines": { "node": ">=14.13.1" } @@ -3240,12 +3243,12 @@ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tsoa": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-6.4.0.tgz", - "integrity": "sha512-bgNJrpkoTRjbFo/3S3fH+wh9mXTbTAJkzfUXgsAFZJNaDr1+tmiEaP3OO4AbjH0i1acKu9HTTmok3tWau4T83Q==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-6.3.1.tgz", + "integrity": "sha512-w2INTVkjqQDlWo5aLv/ZIVAgWSfOOUstOW1WWVYOa+9mY2Er/W9E9BcBpIdaoJ5BtUZimhhhs5BQ2Nn76OfQpw==", "dependencies": { - "@tsoa/cli": "^6.4.0", - "@tsoa/runtime": "^6.4.0" + "@tsoa/cli": "^6.3.1", + "@tsoa/runtime": "^6.3.0" }, "bin": { "tsoa": "dist/cli.js" @@ -3349,9 +3352,9 @@ } }, "node_modules/uglify-js": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.1.tgz", - "integrity": "sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -3584,9 +3587,9 @@ } }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "bin": { "yaml": "bin.mjs" }, diff --git a/src/controllers/log-controller.ts b/src/controllers/log-controller.ts index 93f100b..43ce6c3 100644 --- a/src/controllers/log-controller.ts +++ b/src/controllers/log-controller.ts @@ -1,6 +1,5 @@ -import { Body, Controller, Get, Post, Query, Route, Security } from "tsoa"; +import { Controller, Get, Query, Route, Security } from "tsoa"; import { Client as ElasticsearchClient } from "@elastic/elasticsearch"; -import { match } from "assert"; function getEnvVar(name: string) { const value = process.env[name]; @@ -20,19 +19,15 @@ const elasticsearch = new ElasticsearchClient({ @Route("/api/v1/log") @Security("keycloak") export class LogController extends Controller { - @Post() - async Post( - @Body() - body: { - size: number; - search?: string; - multiSearch?: string[]; - searchAfter?: number; - date?: Date; - startDate?: Date; - endDate?: Date; - }, + @Get() + async GET( + @Query() size: number = 30, + @Query() search?: string, + @Query() searchAfter?: number, @Query() systemName?: string, + @Query() date?: Date, + @Query() startDate?: Date, + @Query() endDate?: Date, @Query() timezone = "+07:00", @Query() sort: "asc" | "desc" = "desc", ) { @@ -41,12 +36,12 @@ export class LogController extends Controller { let startTimeString = "00:00:00"; let endTimeString = "23:59:59"; - if (body.date && !body.startDate && !body.endDate) { - startDateString = `${body.date.getFullYear()}-${`${body.date.getMonth() + 1}`.padStart(2, "0")}-${`${body.date.getDate()}`.padStart(2, "0")}T${startTimeString}`; - endDateString = `${body.date.getFullYear()}-${`${body.date.getMonth() + 1}`.padStart(2, "0")}-${`${body.date.getDate()}`.padStart(2, "0")}T${endTimeString}`; + if (date && !startDate && !endDate) { + startDateString = `${date.getFullYear()}-${`${date.getMonth() + 1}`.padStart(2, "0")}-${`${date.getDate()}`.padStart(2, "0")}T${startTimeString}`; + endDateString = `${date.getFullYear()}-${`${date.getMonth() + 1}`.padStart(2, "0")}-${`${date.getDate()}`.padStart(2, "0")}T${endTimeString}`; } - if (body.startDate) startDateString = body.startDate.toISOString(); - if (body.endDate) endDateString = body.endDate.toISOString(); + if (startDate) startDateString = startDate.toISOString(); + if (endDate) endDateString = endDate.toISOString(); const queryData = await elasticsearch.search({ index: ELASTICSEARCH_INDEX, @@ -54,7 +49,7 @@ export class LogController extends Controller { bool: { must: [ ...(systemName ? [{ match: { systemName } }] : []), - ...(body.search + ...(search ? [ { bool: { @@ -66,7 +61,7 @@ export class LogController extends Controller { "responseCode", "output", ].map((v) => ({ - wildcard: { [v]: "*" + body.search + "*" }, + wildcard: { [v]: "*" + search + "*" }, })), }, }, @@ -85,25 +80,12 @@ export class LogController extends Controller { }, ] : []), - ...(body.multiSearch - ? [ - { - bool: { - should: body.multiSearch.map((v) => ({ - match_phrase: { - userId: v, - }, - })), - }, - }, - ] - : []), ], }, }, - search_after: body.searchAfter ? [body.searchAfter] : undefined, + search_after: searchAfter ? [searchAfter] : undefined, sort: [{ startTimeStamp: sort }], - size: body.size, + size: size, }); return queryData.hits.hits; }