report list log [checkpoint]
This commit is contained in:
parent
4613ff14b6
commit
2c2e1f6732
2 changed files with 234 additions and 7 deletions
|
|
@ -24,6 +24,8 @@ export class LogController extends Controller {
|
||||||
@Query() size: number = 30,
|
@Query() size: number = 30,
|
||||||
@Query() rootId?: string,
|
@Query() rootId?: string,
|
||||||
@Query() search?: string,
|
@Query() search?: string,
|
||||||
|
@Query() searchId?: string,
|
||||||
|
@Query() searchStatus?: string,
|
||||||
@Query() searchAfter?: number,
|
@Query() searchAfter?: number,
|
||||||
@Query() systemName?: string,
|
@Query() systemName?: string,
|
||||||
@Query() date?: Date,
|
@Query() date?: Date,
|
||||||
|
|
@ -56,15 +58,39 @@ export class LogController extends Controller {
|
||||||
{
|
{
|
||||||
bool: {
|
bool: {
|
||||||
should: [
|
should: [
|
||||||
"method",
|
...[
|
||||||
|
"method",
|
||||||
|
"endpoint",
|
||||||
|
"host",
|
||||||
|
"responseCode",
|
||||||
|
"output",
|
||||||
|
"rootId",
|
||||||
|
].map((v) => ({
|
||||||
|
wildcard: { [`${v}.keyword`]: `*${search}*` },
|
||||||
|
})),
|
||||||
|
{term: {_id: search}},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(searchId
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
term: {
|
||||||
|
_id: searchId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(searchStatus
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
bool: {
|
||||||
|
should: [
|
||||||
"logType",
|
"logType",
|
||||||
"endpoint",
|
|
||||||
"host",
|
|
||||||
"responseCode",
|
|
||||||
"output",
|
|
||||||
"rootId",
|
|
||||||
].map((v) => ({
|
].map((v) => ({
|
||||||
wildcard: { [v]: "*" + search + "*" },
|
wildcard: { [v]: "*" + searchStatus + "*" },
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
201
src/controllers/report-controller.ts
Normal file
201
src/controllers/report-controller.ts
Normal file
|
|
@ -0,0 +1,201 @@
|
||||||
|
import { Body, Controller, Get, Post, Query, Route, Security, Tags } from "tsoa";
|
||||||
|
import { Client as ElasticsearchClient } from "@elastic/elasticsearch";
|
||||||
|
|
||||||
|
function getEnvVar(name: string) {
|
||||||
|
const value = process.env[name];
|
||||||
|
if (!value) throw new Error(`${name} is required.`);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ELASTICSEARCH_PROTOCOL = getEnvVar("ELASTICSEARCH_PROTOCOL");
|
||||||
|
const ELASTICSEARCH_HOST = getEnvVar("ELASTICSEARCH_HOST");
|
||||||
|
const ELASTICSEARCH_PORT = getEnvVar("ELASTICSEARCH_PORT");
|
||||||
|
const ELASTICSEARCH_INDEX = getEnvVar("ELASTICSEARCH_INDEX");
|
||||||
|
|
||||||
|
const elasticsearch = new ElasticsearchClient({
|
||||||
|
node: `${ELASTICSEARCH_PROTOCOL}://${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}`,
|
||||||
|
});
|
||||||
|
|
||||||
|
@Route("/api/v1/log/report")
|
||||||
|
@Security("keycloak")
|
||||||
|
@Tags("Report")
|
||||||
|
export class ReportController extends Controller {
|
||||||
|
|
||||||
|
@Get('logsList')
|
||||||
|
async reportLogsList(
|
||||||
|
@Query() rootId?: string,
|
||||||
|
@Query() search?: string,
|
||||||
|
@Query() searchId?: string,
|
||||||
|
@Query() searchStatus?: string,
|
||||||
|
@Query() systemName?: string,
|
||||||
|
@Query() date?: Date,
|
||||||
|
@Query() startDate?: Date,
|
||||||
|
@Query() endDate?: Date,
|
||||||
|
@Query() timezone = "+07:00",
|
||||||
|
@Query() sort: "asc" | "desc" = "desc",
|
||||||
|
) {
|
||||||
|
let startDateString: string | undefined;
|
||||||
|
let endDateString: string | undefined;
|
||||||
|
let startTimeString = "00:00:00";
|
||||||
|
let endTimeString = "23:59:59";
|
||||||
|
|
||||||
|
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 (startDate) startDateString = startDate.toISOString();
|
||||||
|
if (endDate) endDateString = endDate.toISOString();
|
||||||
|
|
||||||
|
const queryData = await elasticsearch.search({
|
||||||
|
index: ELASTICSEARCH_INDEX,
|
||||||
|
query: {
|
||||||
|
bool: {
|
||||||
|
must: [
|
||||||
|
...(systemName ? [{ match: { systemName } }] : []),
|
||||||
|
...(rootId ? [{ match: { rootId } }] : []),
|
||||||
|
...(search
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
bool: {
|
||||||
|
should: [
|
||||||
|
...[
|
||||||
|
"method",
|
||||||
|
"endpoint",
|
||||||
|
"host",
|
||||||
|
"responseCode",
|
||||||
|
"output",
|
||||||
|
"rootId",
|
||||||
|
].map((v) => ({
|
||||||
|
wildcard: { [`${v}.keyword`]: `*${search}*` },
|
||||||
|
})),
|
||||||
|
{term: {_id: search}},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(searchId
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
term: {
|
||||||
|
_id: searchId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(searchStatus
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
bool: {
|
||||||
|
should: [
|
||||||
|
"logType",
|
||||||
|
].map((v) => ({
|
||||||
|
wildcard: { [v]: "*" + searchStatus + "*" },
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
...(startDateString || endDateString
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
range: {
|
||||||
|
startTimeStamp: {
|
||||||
|
time_zone: timezone,
|
||||||
|
gte: startDateString,
|
||||||
|
lte: endDateString,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: []),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sort: [{ startTimeStamp: sort }],
|
||||||
|
});
|
||||||
|
interface DocumentSource {
|
||||||
|
startTimeStamp: Date;
|
||||||
|
userName: string;
|
||||||
|
host: string;
|
||||||
|
endpoint: string;
|
||||||
|
method: string;
|
||||||
|
responseCode: string;
|
||||||
|
logType: string;
|
||||||
|
responseDescription: string;
|
||||||
|
}
|
||||||
|
const raw_data = queryData.hits.hits.map((x) => {
|
||||||
|
const source = x._source as DocumentSource;
|
||||||
|
return {
|
||||||
|
id: x._id,
|
||||||
|
startTimeStamp: source.startTimeStamp,
|
||||||
|
userName: source.userName,
|
||||||
|
host: source.host,
|
||||||
|
endpoint: source.endpoint,
|
||||||
|
method: source.method,
|
||||||
|
responseCode: source.responseCode,
|
||||||
|
logType: source.logType,
|
||||||
|
responseDescription: source.responseDescription,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
const meta_data ={
|
||||||
|
// systemName: systemName,
|
||||||
|
list: raw_data,
|
||||||
|
}
|
||||||
|
return ({
|
||||||
|
template: "logs_list",
|
||||||
|
reportName: "xlsx-report",
|
||||||
|
data: meta_data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get("detail")
|
||||||
|
async reportDetail(
|
||||||
|
@Query() id?: string,
|
||||||
|
) {
|
||||||
|
const queryData = await elasticsearch.search({
|
||||||
|
index: ELASTICSEARCH_INDEX,
|
||||||
|
query: {
|
||||||
|
bool: {
|
||||||
|
must: [ ...(id ? [{term: {_id: id}} ] : []) ],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
interface DocumentSource {
|
||||||
|
startTimeStamp: Date;
|
||||||
|
userName: string;
|
||||||
|
host: string;
|
||||||
|
endpoint: string;
|
||||||
|
method: string;
|
||||||
|
responseCode: string;
|
||||||
|
logType: string;
|
||||||
|
responseDescription: string;
|
||||||
|
input: string;
|
||||||
|
output: string;
|
||||||
|
sequence: string[];
|
||||||
|
}
|
||||||
|
const lists = queryData.hits.hits.map((x) => {
|
||||||
|
const source = x._source as DocumentSource;
|
||||||
|
return {
|
||||||
|
id: x._id,
|
||||||
|
startTimeStamp: source.startTimeStamp,
|
||||||
|
userName: source.userName,
|
||||||
|
host: source.host,
|
||||||
|
endpoint: source.endpoint,
|
||||||
|
method: source.method,
|
||||||
|
responseCode: source.responseCode,
|
||||||
|
logType: source.logType,
|
||||||
|
responseDescription: source.responseDescription,
|
||||||
|
input: source.input,
|
||||||
|
output: source.output,
|
||||||
|
sequence: source.sequence
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return ({
|
||||||
|
template: "logs_detail",
|
||||||
|
reportName: "xlsx-report",
|
||||||
|
data: lists,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue