Files
lanzhouhailiang_one/lms/nladmin-ui/src/views/loki/view/index.vue

279 lines
7.7 KiB
Vue
Raw Normal View History

2022-09-28 10:09:34 +08:00
<template>
<div class="app-container">
<div class="head-container">
<!--工具栏-->
2023-02-07 17:42:33 +08:00
<el-form :inline="true" class="demo-form-inline" label-suffix=":" label-width="90px">
2022-10-11 15:36:35 +08:00
<el-form-item label="日志标签">
<el-cascader
v-model="labelAndValue"
:options="labelsOptions"
placeholder="请选择标签"
/>
2022-09-28 10:09:34 +08:00
</el-form-item>
2022-10-11 15:36:35 +08:00
<el-form-item label="关键字">
<el-input
2023-02-09 13:41:30 +08:00
v-model="message"
2022-10-11 15:36:35 +08:00
size="mini"
placeholder="请输入内容"
clearable
/>
2022-09-28 10:09:34 +08:00
</el-form-item>
<el-form-item v-show="!showOptions" label="时间范围">
2022-09-28 10:09:34 +08:00
<el-date-picker
v-model="timeRange"
size="mini"
clearable
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
@change="queryData"
@blur="queryData"
2022-09-28 10:09:34 +08:00
/>
</el-form-item>
2022-10-11 15:36:35 +08:00
<el-form-item v-show="showOptions" label="时间段">
2022-09-28 10:09:34 +08:00
<el-select v-model="timeZoneValue" filterable placeholder="请选择标签" size="mini" @change="queryData">
<el-option
v-for="item in timeZoneOptions"
:key="item.index"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-tooltip class="item" effect="dark" content="切换查询条件" placement="top">
<span class="el-icon-sort" @click="changeShow" />
</el-tooltip>
</el-form-item>
2023-02-09 13:41:30 +08:00
<el-form-item label="SQL日志" prop="filterSql">
<el-switch
v-model="filterSql"
active-color="#409EFF"
inactive-color="#F56C6C"
active-value="1"
inactive-valu="0"
/>
</el-form-item>
<el-form-item label="HTTP日志" prop="isRequest">
<el-switch
v-model="isRequest"
active-color="#409EFF"
inactive-color="#F56C6C"
active-value="1"
inactive-valu="0"
/>
2022-09-28 10:09:34 +08:00
</el-form-item>
2022-10-11 15:36:35 +08:00
<el-form-item label="显示条数">
2022-09-28 10:09:34 +08:00
<el-input-number
2023-02-09 13:41:30 +08:00
v-model="size"
2022-09-28 10:09:34 +08:00
size="mini"
controls-position="right"
2023-02-09 13:41:30 +08:00
:min="20"
2022-09-28 10:09:34 +08:00
:max="5000"
2023-02-09 13:41:30 +08:00
:step="10"
2022-09-28 10:09:34 +08:00
/>
</el-form-item>
2023-02-09 13:41:30 +08:00
<el-form-item label="当前页">
2022-09-28 10:09:34 +08:00
<el-input-number
2023-02-09 13:41:30 +08:00
v-model="page"
2022-09-28 10:09:34 +08:00
size="mini"
controls-position="right"
2023-02-09 13:41:30 +08:00
:min="1"
2022-09-28 10:09:34 +08:00
:max="2000"
2023-02-09 13:41:30 +08:00
:step="1"
2022-09-28 10:09:34 +08:00
/>
</el-form-item>
<el-form-item>
<el-dropdown split-button type="primary" size="mini" @click="queryData">
2023-02-09 13:41:30 +08:00
查询
2022-09-28 10:09:34 +08:00
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-for="(item, index) in runStatuOptions" :key="index" @click.native="startInterval(item)">{{ item.label }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-form-item>
</el-form>
</div>
2023-02-09 16:58:35 +08:00
<!-- <div style="margin: 3px; min-height: 80vh;">
2023-02-09 13:41:30 +08:00
<el-table :data="logs">
<el-table-column label="ip" prop="requestIp" />
2023-02-09 15:00:38 +08:00
<el-table-column label="所属系统" prop="system" />
2023-02-09 13:41:30 +08:00
<el-table-column label="请求时间" prop="requestTime" />
2023-02-09 15:00:38 +08:00
<el-table-column label="traceId" prop="traceId" />
2023-02-09 13:41:30 +08:00
<el-table-column label="请求时间" prop="requestTime" />
<el-table-column label="请求接口" prop="requestMethod" />
<el-table-column label="logger" prop="logger" />
<el-table-column label="thread" prop="thread" />
2023-02-09 16:58:35 +08:00
<el-table-column label="message" prop="message" show-overflow-tooltip/>
2023-02-09 13:41:30 +08:00
</el-table>
2022-09-28 10:09:34 +08:00
</div>
2023-02-09 16:58:35 +08:00
-->
<div style="margin: 3px; min-height: 80vh;">
<!--数据判空-->
<el-empty v-if="showEmpty" :description="emptyText" />
<!--数据加载-->
<el-card v-else shadow="hover" style="width: 100%;overflow-x: scroll" class="log-warpper">
<div style="width: 100%">
<div v-for="(log, index) in logs" :key="index">
<div>
<span style="margin: 5px;">{{log.system}}---{{log.message}}</span>
</div>
</div>
</div>
</el-card>
</div>
2022-09-28 10:09:34 +08:00
</div>
</template>
<script>
import logOperation from '@/views/loki/api/loki'
let queryParam = {
2023-02-09 13:41:30 +08:00
logLevel: null,
startTime: null,
endTime: null,
message: null,
filterSql: true,
isRequest: true,
page: null,
size: 20
2022-09-28 10:09:34 +08:00
}
export default {
2023-02-09 13:41:30 +08:00
name: 'ES',
2022-09-28 10:09:34 +08:00
data() {
return {
2022-10-11 15:36:35 +08:00
labelAndValue: [], // 搜索的值
labelsOptions: [], // 所有标签和对应所有值数据
2022-09-28 10:09:34 +08:00
timeRange: [],
2023-02-09 13:41:30 +08:00
message: '',
size: 20,
2022-09-28 10:09:34 +08:00
logData: [],
2023-02-09 13:41:30 +08:00
filterSql: '1',
isRequest: '1',
2022-09-28 10:09:34 +08:00
logs: [], // 所有日志
showEmpty: true,
emptyText: '请选择标签',
2023-02-09 13:41:30 +08:00
page: 1,
2022-09-28 10:09:34 +08:00
runStatu: 'off',
runStatuOptions: [{
label: 'off',
value: 0
}, {
label: '5s',
value: 5000
}, {
label: '10s',
value: 10000
}, {
label: '1m',
value: 60000
}, {
label: '5m',
value: 300000
}, {
label: '30m',
value: 1800000
}],
timeZoneOptions: [{
label: '最近5分钟',
value: 300 * 1000
}, {
label: '最近15分钟',
value: 900 * 1000
}, {
label: '最近30分钟',
value: 1800 * 1000
}, {
label: '最近1小时',
value: 3600 * 1000
}, {
label: '最近3小时',
value: 3600 * 1000 * 3
}, {
label: '最近6小时',
value: 3600 * 1000 * 6
}, {
label: '最近12小时',
value: 3600 * 1000 * 12
}, {
label: '最近24小时',
value: 3600 * 1000 * 24
}, {
label: '最近2天',
value: 3600 * 1000 * 24 * 2
}, {
label: '最近7天',
value: 3600 * 1000 * 24 * 7
}, {
label: '最近15天',
value: 3600 * 1000 * 24 * 15
}],
timeZoneValue: '',
showOptions: true
}
},
created() {
2022-10-11 15:36:35 +08:00
this.initLabelsValues()
2022-09-28 10:09:34 +08:00
},
methods: {
2022-10-11 15:36:35 +08:00
initLabelsValues() {
logOperation.labelsValues().then(res => {
this.labelsOptions = res
2022-09-28 10:09:34 +08:00
})
},
queryData() {
// 清空查询数据
this.clearParam()
2023-02-09 13:41:30 +08:00
queryParam.logLabel = this.labelAndValue[0]
const time = new Date()
if (this.timeZoneValue !== '') {
queryParam.endTime = ((time.getTime() - this.timeZoneValue) * 1000000).toString()
2022-09-28 10:09:34 +08:00
}
2023-02-09 13:41:30 +08:00
queryParam.message = this.message.replace(/^\s*|\s*$/g, '')
queryParam.filterSql = this.filterSql === '1'
queryParam.isRequest = this.filterSql === '1'
queryParam.size = this.size
queryParam.page = this.page
2023-02-09 16:58:35 +08:00
2022-09-28 10:09:34 +08:00
logOperation.getLogData(queryParam).then(res => {
this.showEmpty = false
2023-02-09 13:41:30 +08:00
// 清空
this.logs = []
for (const j in res.records) { // 用push的方式将所有日志数组添加进去
this.logs.push(res.records[j])
2022-09-28 10:09:34 +08:00
}
})
},
clearParam() {
queryParam = {
logLabel: null,
logLabelValue: null,
2023-02-09 13:41:30 +08:00
startTime: null,
endTime: null,
message: null,
isRequest: true,
filterSql: true,
size: 20
2022-09-28 10:09:34 +08:00
}
},
changeShow() {
// 清空数据
this.timeZoneValue = ''
this.timeRange = []
this.showOptions = !this.showOptions
}
}
}
</script>
<style scoped>
.log-warpper {
2023-02-09 16:58:35 +08:00
white-space: nowrap;
2022-10-11 15:36:35 +08:00
word-break: break-word;
2022-09-28 10:09:34 +08:00
}
</style>