fix: 修复unknown和app_risk查询bug

This commit is contained in:
chenjinsong
2022-02-14 16:04:08 +08:00
parent 7bdcd1c598
commit 37b5d3f7a5
4 changed files with 61 additions and 22 deletions

View File

@@ -88,7 +88,7 @@ export default class SqlParser extends SqlParserVisitor {
if (isFullText) { if (isFullText) {
if (meta.meta === condition) { if (meta.meta === condition) {
if (meta.column.type !== columnType.fullText) { if (meta.column.type !== columnType.fullText) {
sql += `${meta.column.name}${meta.operator.value}${valueHandle(meta.value.value, meta.column.name)} ` sql += `${meta.column.name}${meta.operator.value}${meta.value.value} `
} else { } else {
sql += "QUERY('" sql += "QUERY('"
this.columnList.forEach(column => { this.columnList.forEach(column => {
@@ -101,7 +101,7 @@ export default class SqlParser extends SqlParserVisitor {
if (meta.meta === condition) { if (meta.meta === condition) {
sql += (meta.column.name) sql += (meta.column.name)
if (meta.column.type !== columnType.fullText) { if (meta.column.type !== columnType.fullText) {
sql += `${meta.operator.value}${valueHandle(meta.value.value, meta.column.name)} ` sql += `${meta.operator.value}${meta.value.value} `
} else { } else {
sql += ' ' sql += ' '
} }
@@ -242,7 +242,7 @@ function handleType (value) {
// 使用单引号包裹 // 使用单引号包裹
export function stringInQuot (value) { export function stringInQuot (value) {
const match = value.match(/^'.+?'$/) const match = `${value}`.match(/^'.+?'$/)
return match ? value : `'${value}'` return match ? value : `'${value}'`
} }
function handleInOrLike (value, type) { function handleInOrLike (value, type) {
@@ -284,7 +284,7 @@ function valueHandle (value, columnName) {
if (columnName) { if (columnName) {
if (columnName === 'app_risk') { if (columnName === 'app_risk') {
const m = riskLevelMapping.find(mapping => { const m = riskLevelMapping.find(mapping => {
return `'${mapping.name}'` === value || `'${mapping.value}'` === value return `'${mapping.name}'`.toLowerCase() === value.toLowerCase() || `'${mapping.value}'` === value
}) })
return (m && m.value) || value return (m && m.value) || value
} }

View File

@@ -45,6 +45,8 @@
</template> </template>
<script> <script>
import { riskLevelMapping } from '@/utils/constants'
export default { export default {
props: { props: {
loading: Boolean loading: Boolean
@@ -60,11 +62,6 @@ export default {
entityTopTenData: [] entityTopTenData: []
} }
}, },
created () {
},
watch: {
},
methods: { methods: {
// 悬浮点击空白隐藏 // 悬浮点击空白隐藏
esc () { esc () {
@@ -81,7 +78,7 @@ export default {
this.entityTopTenData = data.map(d => { this.entityTopTenData = data.map(d => {
return { return {
...d, ...d,
name: d.name || 'unknown', name: this.valueHandle(d.name, this.item.topColumn) || 'unknown',
percent: (parseFloat(d.count / totalCount) * 100).toFixed(2) percent: (parseFloat(d.count / totalCount) * 100).toFixed(2)
} }
}) })
@@ -92,6 +89,15 @@ export default {
indexMethod (index) { indexMethod (index) {
return index + 1 return index + 1
}, },
valueHandle (value, columnName) {
if (columnName === 'app_risk') {
const m = riskLevelMapping.find(mapping => {
return mapping.value === value
})
return (m && m.name) || value
}
return value
},
tableHeaderCellStyle ({ row, column, rowIndex, columnIndex }) { tableHeaderCellStyle ({ row, column, rowIndex, columnIndex }) {
if (rowIndex === 0) { if (rowIndex === 0) {
return 'padding-bottom:5px;padding-top:14px;' return 'padding-bottom:5px;padding-top:14px;'

View File

@@ -121,7 +121,7 @@ import DateTimeRange from '@/components/common/TimeRange/DateTimeRange'
import TimeRefresh from '@/components/common/TimeRange/TimeRefresh' import TimeRefresh from '@/components/common/TimeRange/TimeRefresh'
import EntityFilter from '@/views/entityExplorer/EntityFilter' import EntityFilter from '@/views/entityExplorer/EntityFilter'
import EntityList from '@/views/entityExplorer/entityList/EntityList' import EntityList from '@/views/entityExplorer/entityList/EntityList'
import { entityType, entityFilterType, defaultPageSize } from '@/utils/constants' import {entityType, entityFilterType, defaultPageSize, riskLevelMapping} from '@/utils/constants'
import { get } from '@/utils/http' import { get } from '@/utils/http'
import { api } from '@/utils/api' import { api } from '@/utils/api'
import { getNowTime, getSecond } from '@/utils/date-util' import { getNowTime, getSecond } from '@/utils/date-util'
@@ -437,9 +437,43 @@ export default {
dateTimeRangeChange (s, e, v) { dateTimeRangeChange (s, e, v) {
this.timeFilter = { startTime: s, endTime: e, dateRangeValue: v } this.timeFilter = { startTime: s, endTime: e, dateRangeValue: v }
}, },
// sql特殊字段转换
specialColumnHandle (sql) {
const columns = [
{
target: "app_risk='1'",
original: `app_risk='${riskLevelMapping[0].name.toLowerCase()}'`
},
{
target: "app_risk='2'",
original: `app_risk='${riskLevelMapping[1].name.toLowerCase()}'`
},
{
target: "app_risk='3'",
original: `app_risk='${riskLevelMapping[2].name.toLowerCase()}'`
},
{
target: "app_risk='4'",
original: `app_risk='${riskLevelMapping[3].name.toLowerCase()}'`
},
{
target: "app_risk='5'",
original: `app_risk='${riskLevelMapping[4].name.toLowerCase()}'`
},
{
target: "=''",
original: "='unknown'"
}
]
let result = sql
columns.forEach(c => {
result = this.$_.replace(result, c.original, c.target)
})
return result
},
search (metaList, formatSql) { search (metaList, formatSql) {
if (formatSql) { if (formatSql) {
this.q = formatSql this.q = this.specialColumnHandle(formatSql)
this.metaList = metaList this.metaList = metaList
} else { } else {
this.q = '' this.q = ''
@@ -470,16 +504,16 @@ export default {
} else { } else {
this.limitFilterType = false this.limitFilterType = false
} }
this.queryFilter({ entityType: entityType, q: formatSql, ...this.timeFilter }) this.queryFilter({ entityType: entityType, q: this.q, ...this.timeFilter })
this.queryList({ q: formatSql, ...this.timeFilter, ...this.pageObj }) this.queryList({ q: this.q, ...this.timeFilter, ...this.pageObj })
this.queryListTotal({ q: formatSql, ...this.timeFilter }) this.queryListTotal({ q: this.q, ...this.timeFilter })
} else { } else {
this.limitFilterType = false this.limitFilterType = false
this.queryFilter({ entityType: 'ip', q: formatSql, ...this.timeFilter }) this.queryFilter({ entityType: 'ip', q: this.q, ...this.timeFilter })
this.queryFilter({ entityType: 'domain', q: formatSql, ...this.timeFilter }) this.queryFilter({ entityType: 'domain', q: this.q, ...this.timeFilter })
this.queryFilter({ entityType: 'app', q: formatSql, ...this.timeFilter }) this.queryFilter({ entityType: 'app', q: this.q, ...this.timeFilter })
this.queryList({ q: formatSql, ...this.timeFilter, ...this.pageObj }) this.queryList({ q: this.q, ...this.timeFilter, ...this.pageObj })
this.queryListTotal({ q: formatSql, ...this.timeFilter }) this.queryListTotal({ q: this.q, ...this.timeFilter })
} }
} else { } else {
this.limitFilterType = false this.limitFilterType = false
@@ -531,7 +565,7 @@ export default {
endTime: getSecond(params.endTime) endTime: getSecond(params.endTime)
} }
get(api.entityFilter, queryParams).then(response => { get(api.entityFilter, queryParams).then(response => {
if (response.data.result) { if (response.data && response.data.result) {
switch (params.entityType) { switch (params.entityType) {
case 'ip': { case 'ip': {
this.filterData[0].data.forEach(d => { this.filterData[0].data.forEach(d => {

View File

@@ -36,7 +36,6 @@
import EntityTop from '@/components/entities/EntityTop' import EntityTop from '@/components/entities/EntityTop'
import { get } from '@/utils/http' import { get } from '@/utils/http'
import { api } from '@/utils/api' import { api } from '@/utils/api'
import { objToStr } from '@/utils/tools'
export default { export default {
name: 'EntityFilter', name: 'EntityFilter',
components: { components: {