loki修改

This commit is contained in:
lyd
2022-10-11 15:36:35 +08:00
parent 28abb527d9
commit b44858bf9b
7 changed files with 102 additions and 123 deletions

View File

@@ -25,16 +25,10 @@ public class LokiController {
private final LokiService lokiService; private final LokiService lokiService;
@GetMapping("/labels") @GetMapping("/labels/values")
@ApiOperation("获取标签") @ApiOperation("获取标签")
public ResponseEntity<Object> labels() { public ResponseEntity<Object> labelsValues() {
return new ResponseEntity<>(lokiService.getLabels(), HttpStatus.OK); return new ResponseEntity<>(lokiService.getLabelsValues(), HttpStatus.OK);
}
@PostMapping("/values")
@ApiOperation("根据标签获取值")
public ResponseEntity<Object> getAllValues(@RequestBody String label) {
return new ResponseEntity<>(lokiService.getValuesByLabel(label), HttpStatus.OK);
} }
@PostMapping("/logs") @PostMapping("/logs")

View File

@@ -1,5 +1,6 @@
package org.nl.modules.loki.service; package org.nl.modules.loki.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
/** /**
@@ -8,18 +9,6 @@ import com.alibaba.fastjson.JSONObject;
* @Date: 2022-08-15 * @Date: 2022-08-15
*/ */
public interface LokiService { public interface LokiService {
/**
* 获取日志的所有标签
* @return
*/
JSONObject getLabels();
/**
* 根据label获取值
* @param label
* @return
*/
JSONObject getValuesByLabel(String label);
/** /**
* 获取日志信息 * 获取日志信息
@@ -27,4 +16,10 @@ public interface LokiService {
* @return * @return
*/ */
JSONObject getLogData(JSONObject json); JSONObject getLogData(JSONObject json);
/**
* 获取labels和values树
* @return
*/
JSONArray getLabelsValues();
} }

View File

@@ -2,6 +2,7 @@ package org.nl.modules.loki.service.impl;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.nl.modules.loki.service.LokiService; import org.nl.modules.loki.service.LokiService;
@@ -23,20 +24,6 @@ public class LokiServiceImpl implements LokiService {
@Value("${loki.systemName}") @Value("${loki.systemName}")
private String systemName; private String systemName;
@Override
public JSONObject getLabels() {
String result = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(result);
return parse;
}
@Override
public JSONObject getValuesByLabel(String label) {
String result = HttpUtil.get(lokiUrl + "/label/" + label + "/values", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(result);
return parse;
}
@Override @Override
public JSONObject getLogData(JSONObject json) { public JSONObject getLogData(JSONObject json) {
String logLabel = ""; String logLabel = "";
@@ -78,4 +65,49 @@ public class LokiServiceImpl implements LokiService {
return parse; return parse;
} }
/**
* 获取labels和values树
*
* @return
*/
@Override
public JSONArray getLabelsValues() {
/**
* [{
* label:
* value:
* children:[{
* label
* value
* }]
* }]
*/
JSONArray result = new JSONArray();
// 获取所有标签
String labelString = HttpUtil.get(lokiUrl + "/labels", CharsetUtil.CHARSET_UTF_8);
JSONObject parse = (JSONObject) JSONObject.parse(labelString);
JSONArray labels = parse.getJSONArray("data");
for (int i=0; i<labels.size(); i++) {
// 获取标签下的所有值
String valueString = HttpUtil.get(lokiUrl + "/label/" + labels.getString(i) + "/values", CharsetUtil.CHARSET_UTF_8);
JSONObject parse2 = (JSONObject) JSONObject.parse(valueString);
JSONArray values = parse2.getJSONArray("data");
JSONArray children = new JSONArray();
// 组成树形状态 两级
for (int j=0; j<values.size(); j++) {
JSONObject leaf = new JSONObject();
leaf.put("label", values.getString(j));
leaf.put("value", values.getString(j));
children.add(leaf);
}
JSONObject node = new JSONObject();
node.put("label", labels.getString(i));
node.put("value", labels.getString(i));
node.put("children", children);
result.add(node);
}
return result;
}
} }

View File

@@ -51,7 +51,7 @@ public class LokiLogAspect {
LokiLogType logType = lokiLog.type(); LokiLogType logType = lokiLog.type();
MDC.put("log_file_type", logType.name()); MDC.put("log_file_type", logType.name());
log.info("入参:" + JSONObject.toJSONString(pjp.getArgs())); log.info("入参" + JSONObject.toJSONString(pjp.getArgs()));
Object proceed = pjp.proceed(); Object proceed = pjp.proceed();

View File

@@ -34,6 +34,8 @@ public class OutController {
@Log("套轴确认") @Log("套轴确认")
@ApiOperation("套轴确认") @ApiOperation("套轴确认")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) { public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(casingService.confirm(whereJson), HttpStatus.OK); casingService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
} }

View File

@@ -1,20 +1,5 @@
import request from '@/utils/request' import request from '@/utils/request'
export function getAllLabels() {
return request({
url: 'api/loki/labels',
method: 'get'
})
}
export function getAllValues(label) {
return request({
url: 'api/loki/values',
method: 'post',
data: label
})
}
export function getLogData(param) { export function getLogData(param) {
return request({ return request({
url: 'api/loki/logs', url: 'api/loki/logs',
@@ -23,4 +8,11 @@ export function getLogData(param) {
}) })
} }
export default { getAllLabels, getAllValues, getLogData } export function labelsValues() {
return request({
url: 'api/loki/labels/values',
method: 'get'
})
}
export default { getLogData, labelsValues }

View File

@@ -2,34 +2,23 @@
<div class="app-container"> <div class="app-container">
<div class="head-container"> <div class="head-container">
<!--工具栏--> <!--工具栏-->
<el-form :inline="true" class="demo-form-inline"> <el-form :inline="true" class="demo-form-inline" label-suffix=":" label-width="80px">
<el-form-item label="标签"> <el-form-item label="日志标签">
<el-select v-model="logLabel" filterable placeholder="请选择标签" size="mini" @change="getValues"> <el-cascader
<el-option v-model="labelAndValue"
v-for="item in labelOptions" :options="labelsOptions"
:key="item.index" @change="queryData"
:label="item" placeholder="请选择标签"/>
:value="item"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="="> <el-form-item label="关键字">
<el-select v-model="logLabelValue" filterable placeholder="请选择标签" size="mini" @change="queryData"> <el-input
<el-option v-model="text"
v-for="item in labelValueOptions" size="mini"
:key="item.index" placeholder="请输入内容"
:label="item" clearable
:value="item" />
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="方向"> <el-form-item label="时间范围" v-show="!showOptions">
<el-radio-group v-model="direction" size="mini" @change="queryData">
<el-radio label="backward">backward</el-radio>
<el-radio label="forward">forward</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="时间范围" style="margin-left: 10px" v-show="!showOptions">
<el-date-picker <el-date-picker
@change="queryData" @change="queryData"
@blur="queryData" @blur="queryData"
@@ -43,7 +32,7 @@
align="right" align="right"
/> />
</el-form-item> </el-form-item>
<el-form-item v-show="showOptions" label="时差" style="margin-left: 10px"> <el-form-item v-show="showOptions" label="时间段">
<el-select v-model="timeZoneValue" filterable placeholder="请选择标签" size="mini" @change="queryData"> <el-select v-model="timeZoneValue" filterable placeholder="请选择标签" size="mini" @change="queryData">
<el-option <el-option
v-for="item in timeZoneOptions" v-for="item in timeZoneOptions"
@@ -58,18 +47,13 @@
<span class="el-icon-sort" @click="changeShow" /> <span class="el-icon-sort" @click="changeShow" />
</el-tooltip> </el-tooltip>
</el-form-item> </el-form-item>
</el-form> <el-form-item label="方向">
<el-form :inline="true" class="demo-form-inline"> <el-radio-group v-model="direction" size="mini" @change="queryData">
<el-form-item label="关键字"> <el-radio label="backward">backward</el-radio>
<el-input <el-radio label="forward">forward</el-radio>
v-model="text" </el-radio-group>
style="width: 300px"
size="mini"
placeholder="请输入内容"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="条数" style="margin-left: 10px"> <el-form-item label="显示条数">
<el-input-number <el-input-number
v-model="limits" v-model="limits"
size="mini" size="mini"
@@ -79,7 +63,7 @@
:step="100" :step="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="滚动步数" style="margin-left: 10px"> <el-form-item label="滚动步数">
<el-input-number <el-input-number
v-model="scrollStep" v-model="scrollStep"
size="mini" size="mini"
@@ -132,10 +116,8 @@ export default {
name: 'Loki', name: 'Loki',
data() { data() {
return { return {
labelOptions: [], // 标签数据 labelAndValue: [], // 搜索的值
labelValueOptions: [], // 标签值 labelsOptions: [], // 所有标签和对应所有值数据
logLabel: '',
logLabelValue: '',
timeRange: [], timeRange: [],
text: '', text: '',
limits: 100, limits: 100,
@@ -214,7 +196,7 @@ export default {
window.addEventListener('scroll', this.handleScroll) window.addEventListener('scroll', this.handleScroll)
}, },
created() { created() {
this.initLabelOptions() this.initLabelsValues()
}, },
// 关闭定时器 - 加了缓存就必须使用deactivated // 关闭定时器 - 加了缓存就必须使用deactivated
deactivated() { deactivated() {
@@ -230,25 +212,18 @@ export default {
window.removeEventListener('scroll', this.handleScroll) window.removeEventListener('scroll', this.handleScroll)
}, },
methods: { methods: {
initLabelOptions() { // 获取lables initLabelsValues() {
logOperation.getAllLabels().then(res => { logOperation.labelsValues().then(res => {
this.labelOptions = res.data this.labelsOptions = res
})
},
getValues() {
this.logLabelValue = null
logOperation.getAllValues(this.logLabel).then(res => {
this.labelValueOptions = res.data
}) })
}, },
queryData() { queryData() {
console.log(this.labelAndValue)
// 清空查询数据 // 清空查询数据
this.clearParam() this.clearParam()
if (this.logLabel !== '') { // 标签 if (this.labelAndValue.length > 0) {
queryParam.logLabel = this.logLabel queryParam.logLabel = this.labelAndValue[0]
} queryParam.logLabelValue = this.labelAndValue[1]
if (this.logLabelValue !== '') { // 标签值
queryParam.logLabelValue = this.logLabelValue
} }
if (queryParam.logLabelValue === null) { // 判空 if (queryParam.logLabelValue === null) { // 判空
this.$message({ this.$message({
@@ -263,14 +238,8 @@ export default {
if (this.timeRange.length !== 0) { // 如果是输入时间范围 if (this.timeRange.length !== 0) { // 如果是输入时间范围
queryParam.start = (new Date(this.timeRange[0]).getTime() * 1000000).toString() queryParam.start = (new Date(this.timeRange[0]).getTime() * 1000000).toString()
queryParam.end = (new Date(this.timeRange[1]).getTime() * 1000000).toString() queryParam.end = (new Date(this.timeRange[1]).getTime() * 1000000).toString()
console.log(queryParam.start)
console.log('-----------------------------')
console.log(queryParam.end)
} }
if (this.timeZoneValue) { if (this.timeZoneValue) {
// console.log('时差:', this.timeZoneValue)
// console.log('start时间', new Date().getTime() - this.timeZoneValue)
// console.log('end时间', new Date().getTime())
const time = new Date() const time = new Date()
queryParam.start = ((time.getTime() - this.timeZoneValue) * 1000000).toString() queryParam.start = ((time.getTime() - this.timeZoneValue) * 1000000).toString()
queryParam.end = (time.getTime() * 1000000).toString() queryParam.end = (time.getTime() * 1000000).toString()
@@ -282,10 +251,8 @@ export default {
queryParam.limits = this.limits queryParam.limits = this.limits
} }
queryParam.direction = this.direction queryParam.direction = this.direction
console.log('最后参数:', queryParam)
var ansi_up = new AnsiUp() var ansi_up = new AnsiUp()
logOperation.getLogData(queryParam).then(res => { logOperation.getLogData(queryParam).then(res => {
console.log('结果', res)
this.showEmpty = false this.showEmpty = false
if (res.data.result.length === 1) { if (res.data.result.length === 1) {
this.logs = res.data.result[0].values this.logs = res.data.result[0].values
@@ -331,7 +298,6 @@ export default {
const scrollHeight = document.documentElement.scrollHeight// 内容高度 const scrollHeight = document.documentElement.scrollHeight// 内容高度
const bottomest = Math.ceil(scrollTop + clientHeight) const bottomest = Math.ceil(scrollTop + clientHeight)
if (bottomest >= scrollHeight) { if (bottomest >= scrollHeight) {
console.log(1)
// 加载新数据 // 加载新数据
queryParam.limits = this.scrollStep queryParam.limits = this.scrollStep
queryParam.direction = this.direction queryParam.direction = this.direction
@@ -346,7 +312,6 @@ export default {
if (zone === 0) { if (zone === 0) {
zone = 3600 * 1000 * 6 zone = 3600 * 1000 * 6
} }
console.log('时间差:', zone)
if (this.direction === 'backward') { // 设置时间区间 if (this.direction === 'backward') { // 设置时间区间
queryParam.start = (this.logs[this.logs.length - 1][0] - zone).toString() queryParam.start = (this.logs[this.logs.length - 1][0] - zone).toString()
queryParam.end = this.logs[this.logs.length - 1][0] queryParam.end = this.logs[this.logs.length - 1][0]
@@ -354,7 +319,6 @@ export default {
queryParam.start = this.logs[this.logs.length - 1][0] queryParam.start = this.logs[this.logs.length - 1][0]
queryParam.end = (parseFloat(this.logs[this.logs.length - 1][0]) + parseFloat(zone.toString())).toString() queryParam.end = (parseFloat(this.logs[this.logs.length - 1][0]) + parseFloat(zone.toString())).toString()
} }
console.log('滚动的参数:', queryParam)
var ansi_up = new AnsiUp() var ansi_up = new AnsiUp()
logOperation.getLogData(queryParam).then(res => { logOperation.getLogData(queryParam).then(res => {
this.showEmpty = false this.showEmpty = false
@@ -471,7 +435,7 @@ export default {
<style scoped> <style scoped>
.log-warpper { .log-warpper {
word-break: break-all; word-break: break-word;
word-wrap: break-word word-wrap: break-word
} }
</style> </style>