loki修改
This commit is contained in:
@@ -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")
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 }
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user