feat(web): 增加服务日志跳转
This commit is contained in:
40
.idea/httpRequests/http-requests-log.http
generated
40
.idea/httpRequests/http-requests-log.http
generated
@@ -1,3 +1,23 @@
|
||||
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/queue/queue/all?name=compaction-queue-b1
|
||||
Connection: Keep-Alive
|
||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
||||
Cookie: JSESSIONID=A671FB3CA5360CA75F871BE9CBA3671E
|
||||
Accept-Encoding: br,deflate,gzip,x-gzip
|
||||
|
||||
<> 2024-01-31T151734.200.json
|
||||
|
||||
###
|
||||
|
||||
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/queue/queue/all/compaction-queue-b1
|
||||
Connection: Keep-Alive
|
||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
||||
Cookie: JSESSIONID=22E06ED40F4625C6226C2118C5675363
|
||||
Accept-Encoding: br,deflate,gzip,x-gzip
|
||||
|
||||
<> 2024-01-31T151720.404.json
|
||||
|
||||
###
|
||||
|
||||
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_cloud_query/cloud/targets
|
||||
Connection: Keep-Alive
|
||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
||||
@@ -442,23 +462,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
|
||||
|
||||
###
|
||||
|
||||
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_scheduler/schedule/schedule_times
|
||||
Connection: Keep-Alive
|
||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
||||
Cookie: JSESSIONID=72C86B35CEC2C7C8EAD234351B7EF959
|
||||
Accept-Encoding: br,deflate,gzip,x-gzip
|
||||
|
||||
<> 2024-01-15T145017.200.json
|
||||
|
||||
###
|
||||
|
||||
GET http://AxhEbscwsJDbYMH2:cYxg3b4PtWoVD5SjFayWxtnSVsjzRsg4@132.126.207.130:35690/hudi_services/service_scheduler/schedule/schedule_times
|
||||
Connection: Keep-Alive
|
||||
User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.9)
|
||||
Cookie: JSESSIONID=0C3AEB91AD103B11FD674356CB0FCC2B
|
||||
Accept-Encoding: br,deflate,gzip,x-gzip
|
||||
|
||||
<> 2024-01-15T144904.200.json
|
||||
|
||||
###
|
||||
|
||||
|
||||
@@ -1,24 +1,131 @@
|
||||
function commonInfo() {
|
||||
return {
|
||||
// baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
|
||||
baseUrl: '/hudi_services/service_web',
|
||||
baseUrl: 'http://132.126.207.131:35690/hudi_services/service_web',
|
||||
// baseUrl: '/hudi_services/service_web',
|
||||
loki: {
|
||||
grafanaUrl: 'http://132.126.207.125:35700',
|
||||
hudi: {
|
||||
url: 'http://132.126.207.125:35700',
|
||||
datasource: 'f648174e-7593-45cf-8fe8-8f8d5cf0fdde',
|
||||
},
|
||||
service: {
|
||||
datasource: 'b6fee51c-facd-4261-a0eb-8c69a975fba3',
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries
|
||||
* {datasource, queryMap}
|
||||
*/
|
||||
function generateLokiPanel(queries) {
|
||||
return {
|
||||
LWF: {
|
||||
queries: [
|
||||
...queries.map(item => {
|
||||
let name = item['name']
|
||||
let datasource = item['datasource']
|
||||
let queryMap = item['queryMap']
|
||||
let query = Object.keys(queryMap)
|
||||
.sort()
|
||||
.map(key => `${key}="${queryMap[key]}"`)
|
||||
let match = "\\d{4}-(?P<time>\\d{2}-\\d{2}\\s*\\d{2}:\\d{2}:\\d{2}).+#@#\\s*(?P<content>[\\w\\W]+)"
|
||||
let format = "{{.time}} [{{.host}}] [{{.level}}] [{{.app}}] {{.content}}"
|
||||
// language=TEXT
|
||||
let expression = `{${query.join(",")}}\n| regexp "${match.replaceAll('\\', '\\\\')}"\n| line_format \`${format}\``
|
||||
return {
|
||||
refId: name,
|
||||
expr: expression,
|
||||
queryType: "range",
|
||||
datasource: {
|
||||
type: "loki",
|
||||
uid: datasource
|
||||
},
|
||||
editorMode: "code"
|
||||
}
|
||||
})
|
||||
],
|
||||
range: {
|
||||
from: "now-1h",
|
||||
to: "now"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function generateQuery(name, datasource, queryMap) {
|
||||
return {
|
||||
name: name,
|
||||
datasource: datasource,
|
||||
queryMap: queryMap,
|
||||
}
|
||||
}
|
||||
|
||||
function generateLokiUrl(baseUrl, queries) {
|
||||
return `${baseUrl}/explore?panes=${encodeURIComponent(JSON.stringify(generateLokiPanel(queries)))}&schemaVersion=1&orgId=1`
|
||||
}
|
||||
|
||||
function targetHudiSyncLokiUrlByAlias(flinkJobId) {
|
||||
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp%3D%5C%22hudi-sync%5C%22,%20flink_job_id%3D%5C%22${flinkJobId}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
|
||||
return generateLokiUrl(
|
||||
commonInfo().loki.grafanaUrl,
|
||||
[
|
||||
generateQuery(
|
||||
"Hudi 运行日志",
|
||||
commonInfo().loki.hudi.datasource,
|
||||
{"flink_job_id": flinkJobId}
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
function targetHudiCompactionLokiUrlByAlias(alias) {
|
||||
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp%3D%5C%22hudi-compaction%5C%22,%20alias%3D%5C%22${alias}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
|
||||
return generateLokiUrl(
|
||||
commonInfo().loki.grafanaUrl,
|
||||
[
|
||||
generateQuery(
|
||||
"Hudi 运行日志",
|
||||
commonInfo().loki.hudi.datasource,
|
||||
{"alias": alias}
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
function targetYarnApplicationLokiUrlByAppId(applicationId) {
|
||||
return `${commonInfo().loki.hudi.url}/explore?panes=%7B%22LWF%22:%7B%22datasource%22:%22${commonInfo().loki.hudi.datasource}%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bapp_id%3D%5C%22${applicationId}%5C%22%7D%5Cn%7C%20regexp%20%5C%22%5C%5C%5C%5Cd%7B4%7D-%28%3FP%3Ctime%3E%5C%5C%5C%5Cd%7B2%7D-%5C%5C%5C%5Cd%7B2%7D%5C%5C%5C%5Cs%2A%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D:%5C%5C%5C%5Cd%7B2%7D%29.%2B%23@%23%5C%5C%5C%5C%5Cs%2A%28%3FP%3Ccontent%3E%5B%5C%5C%5C%5Cw%5C%5C%5C%5CW%5D%2B%29%5C%22%5Cn%7C%20line_format%20%60%7B%7B.time%7D%7D%20%5B%7B%7B.host%7D%7D%5D%20%5B%7B%7B.level%7D%7D%5D%20%5B%7B%7B.app%7D%7D%5D%20%7B%7B.content%7D%7D%60%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f648174e-7593-45cf-8fe8-8f8d5cf0fdde%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D%7D&schemaVersion=1&orgId=1`
|
||||
}
|
||||
return generateLokiUrl(
|
||||
commonInfo().loki.grafanaUrl,
|
||||
[
|
||||
generateQuery(
|
||||
"Hudi 运行日志",
|
||||
commonInfo().loki.hudi.datasource,
|
||||
{"app_id": applicationId}
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
function serviceLogByAppName(name) {
|
||||
return generateLokiUrl(
|
||||
commonInfo().loki.grafanaUrl,
|
||||
[
|
||||
generateQuery(
|
||||
"Service 运行日志",
|
||||
commonInfo().loki.service.datasource,
|
||||
{"app": name}
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
function serviceLogByAppNameAndHost(name, host) {
|
||||
return generateLokiUrl(
|
||||
commonInfo().loki.grafanaUrl,
|
||||
[
|
||||
generateQuery(
|
||||
"Service 运行日志",
|
||||
commonInfo().loki.service.datasource,
|
||||
{"app": name, "host": host}
|
||||
)
|
||||
]
|
||||
)
|
||||
}
|
||||
|
||||
@@ -30,8 +30,41 @@ function cloudCrud(title, path) {
|
||||
align: 'center',
|
||||
width: 160,
|
||||
},
|
||||
{name: 'url', label: '地址', width: 200},
|
||||
{name: 'serviceId', label: '服务', width: 200, fixed: 'right'},
|
||||
{name: 'url', label: '地址'},
|
||||
{
|
||||
type: 'operation',
|
||||
label: '操作',
|
||||
width: 100,
|
||||
fixed: 'right',
|
||||
className: 'nowrap',
|
||||
buttons: [
|
||||
{
|
||||
label: "日志",
|
||||
type: "action",
|
||||
level: "link",
|
||||
tooltip: '打开Grafana日志',
|
||||
onEvent: {
|
||||
click: {
|
||||
actions: [
|
||||
{
|
||||
actionType: 'custom',
|
||||
script: (context, doAction, event) => {
|
||||
let data = context.props.data
|
||||
let url = ''
|
||||
if (data['metadata']) {
|
||||
url = serviceLogByAppNameAndHost(data.serviceId, data.metadata.hostname)
|
||||
} else if (data['name']) {
|
||||
url = serviceLogByAppName(data.name)
|
||||
}
|
||||
window.open(url, '_blank')
|
||||
},
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -467,7 +467,6 @@ function yarnCrudColumns() {
|
||||
url = targetHudiCompactionLokiUrlByAlias(alias)
|
||||
} else {
|
||||
url = targetYarnApplicationLokiUrlByAppId(appId)
|
||||
console.log(url)
|
||||
}
|
||||
window.open(url, '_blank')
|
||||
},
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
GET {{queue-url}}/queue/names
|
||||
|
||||
### 队列内容
|
||||
GET {{queue-url}}/queue/all/compaction-queue-b1
|
||||
GET {{queue-url}}/queue/all?name=compaction-queue-b1
|
||||
|
||||
### 新增
|
||||
POST {{queue-url}}/queue/add/compaction-queue-b1
|
||||
|
||||
Reference in New Issue
Block a user