import{_ as i}from"./arthas-web-ui.d97900e6.js";import{_ as l,o as c,c as u,a as s,b as a,w as r,e as n,d as t,r as o}from"./app.391b0e4e.js";const d={},v=s("h1",{id:"http-api",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#http-api","aria-hidden":"true"},"#"),n(" Http API")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=case-http-api",target:"_blank",rel:"noopener noreferrer"},b=s("code",null,"Http API",-1),m=n("\u5728\u7EBF\u6559\u7A0B"),q=t(`
Http API \u63D0\u4F9B\u7C7B\u4F3C RESTful \u7684\u4EA4\u4E92\u63A5\u53E3\uFF0C\u8BF7\u6C42\u548C\u54CD\u5E94\u5747\u4E3A JSON \u683C\u5F0F\u7684\u6570\u636E\u3002\u76F8\u5BF9\u4E8E Telnet/WebConsole \u7684\u8F93\u51FA\u975E\u7ED3\u6784\u5316\u6587\u672C\u6570\u636E\uFF0CHttp API \u53EF\u4EE5\u63D0\u4F9B\u7ED3\u6784\u5316\u7684\u6570\u636E\uFF0C\u652F\u6301\u66F4\u590D\u6742\u7684\u4EA4\u4E92\u529F\u80FD\uFF0C\u6BD4\u5982\u7279\u5B9A\u5E94\u7528\u573A\u666F\u7684\u4E00\u7CFB\u5217\u8BCA\u65AD\u64CD\u4F5C\u3002
Http API \u63A5\u53E3\u5730\u5740\u4E3A\uFF1Ahttp://ip:port/api
\uFF0C\u5FC5\u987B\u4F7F\u7528 POST \u65B9\u5F0F\u63D0\u4EA4\u8BF7\u6C42\u53C2\u6570\u3002\u5982 POST http://127.0.0.1:8563/api
\u3002
\u6CE8\u610F\uFF1Atelnet \u670D\u52A1\u7684 3658 \u7AEF\u53E3\u4E0E Chrome \u6D4F\u89C8\u5668\u6709\u517C\u5BB9\u6027\u95EE\u9898\uFF0C\u5EFA\u8BAE\u4F7F\u7528 http \u7AEF\u53E3 8563 \u6765\u8BBF\u95EE http \u63A5\u53E3\u3002
{
"action": "exec",
"requestId": "req112",
"sessionId": "94766d3c-8b39-42d3-8596-98aee3ccbefb",
"consumerId": "955dbd1325334a84972b0f3ac19de4f7_2",
"command": "version",
"execTimeout": "10000"
}
\u8BF7\u6C42\u6570\u636E\u683C\u5F0F\u8BF4\u660E\uFF1A
action
: \u8BF7\u6C42\u7684\u52A8\u4F5C/\u884C\u4E3A\uFF0C\u53EF\u9009\u503C\u8BF7\u53C2\u8003"\u8BF7\u6C42 Action"\u5C0F\u8282\u3002requestId
: \u53EF\u9009\u8BF7\u6C42 ID\uFF0C\u7531\u5BA2\u6237\u7AEF\u751F\u6210\u3002sessionId
: Arthas \u4F1A\u8BDD ID\uFF0C\u4E00\u6B21\u6027\u547D\u4EE4\u4E0D\u9700\u8981\u8BBE\u7F6E\u4F1A\u8BDD ID\u3002consumerId
: Arthas \u6D88\u8D39\u8005 ID\uFF0C\u7528\u4E8E\u591A\u4EBA\u5171\u4EAB\u4F1A\u8BDD\u3002command
: Arthas command line \u3002execTimeout
: \u547D\u4EE4\u540C\u6B65\u6267\u884C\u7684\u8D85\u65F6\u65F6\u95F4(ms)\uFF0C\u9ED8\u8BA4\u4E3A 30000\u3002\u6CE8\u610F: \u4E0D\u540C\u7684 action \u4F7F\u7528\u5230\u53C2\u6570\u4E0D\u540C\uFF0C\u6839\u636E\u5177\u4F53\u7684 action \u6765\u8BBE\u7F6E\u53C2\u6570\u3002
\u76EE\u524D\u652F\u6301\u7684\u8BF7\u6C42 Action \u5982\u4E0B\uFF1A
exec
: \u540C\u6B65\u6267\u884C\u547D\u4EE4\uFF0C\u547D\u4EE4\u6B63\u5E38\u7ED3\u675F\u6216\u8005\u8D85\u65F6\u540E\u4E2D\u65AD\u547D\u4EE4\u6267\u884C\u540E\u8FD4\u56DE\u547D\u4EE4\u7684\u6267\u884C\u7ED3\u679C\u3002async_exec
: \u5F02\u6B65\u6267\u884C\u547D\u4EE4\uFF0C\u7ACB\u5373\u8FD4\u56DE\u547D\u4EE4\u7684\u8C03\u5EA6\u7ED3\u679C\uFF0C\u547D\u4EE4\u6267\u884C\u7ED3\u679C\u901A\u8FC7pull_results
\u83B7\u53D6\u3002interrupt_job
: \u4E2D\u65AD\u4F1A\u8BDD\u5F53\u524D\u7684\u547D\u4EE4\uFF0C\u7C7B\u4F3C Telnet Ctrl + c
\u7684\u529F\u80FD\u3002pull_results
: \u83B7\u53D6\u5F02\u6B65\u6267\u884C\u7684\u547D\u4EE4\u7684\u7ED3\u679C\uFF0C\u4EE5 http \u957F\u8F6E\u8BE2\uFF08long-polling\uFF09\u65B9\u5F0F\u91CD\u590D\u6267\u884Cinit_session
: \u521B\u5EFA\u4F1A\u8BDDjoin_session
: \u52A0\u5165\u4F1A\u8BDD\uFF0C\u7528\u4E8E\u652F\u6301\u591A\u4EBA\u5171\u4EAB\u540C\u4E00\u4E2A Arthas \u4F1A\u8BDDclose_session
: \u5173\u95ED\u4F1A\u8BDD\u54CD\u5E94\u4E2D\u7684 state \u5C5E\u6027\u8868\u793A\u8BF7\u6C42\u5904\u7406\u72B6\u6001\uFF0C\u53D6\u503C\u5982\u4E0B\uFF1A
SCHEDULED
\uFF1A\u5F02\u6B65\u6267\u884C\u547D\u4EE4\u65F6\u8868\u793A\u5DF2\u7ECF\u521B\u5EFA job \u5E76\u5DF2\u63D0\u4EA4\u5230\u547D\u4EE4\u6267\u884C\u961F\u5217\uFF0C\u547D\u4EE4\u53EF\u80FD\u8FD8\u6CA1\u5F00\u59CB\u6267\u884C\u6216\u8005\u6267\u884C\u4E2D\uFF1BSUCCEEDED
\uFF1A\u8BF7\u6C42\u5904\u7406\u6210\u529F\uFF08\u5B8C\u6210\u72B6\u6001\uFF09\uFF1BFAILED
\uFF1A\u8BF7\u6C42\u5904\u7406\u5931\u8D25\uFF08\u5B8C\u6210\u72B6\u6001\uFF09\uFF0C\u901A\u5E38\u9644\u5E26 message \u8BF4\u660E\u539F\u56E0\uFF1BREFUSED
\uFF1A\u8BF7\u6C42\u88AB\u62D2\u7EDD\uFF08\u5B8C\u6210\u72B6\u6001\uFF09\uFF0C\u901A\u5E38\u9644\u5E26 message \u8BF4\u660E\u539F\u56E0\uFF1B\u4E0E\u6267\u884C\u6279\u5904\u7406\u547D\u4EE4\u7C7B\u4F3C\uFF0C\u4E00\u6B21\u6027\u547D\u4EE4\u4EE5\u540C\u6B65\u65B9\u5F0F\u6267\u884C\u3002\u4E0D\u9700\u8981\u521B\u5EFA\u4F1A\u8BDD\uFF0C\u4E0D\u9700\u8981\u8BBE\u7F6EsessionId
\u9009\u9879\u3002
{
"action": "exec",
"command": "<Arthas command line>"
}
\u6BD4\u5982\u83B7\u53D6 Arthas \u7248\u672C\u53F7\uFF1A
curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"exec",
"command":"version"
}
'
\u54CD\u5E94\u5185\u5BB9\u5982\u4E0B\uFF1A
{
"state": "SUCCEEDED",
"sessionId": "ee3bc004-4586-43de-bac0-b69d6db7a869",
"body": {
"results": [
{
"type": "version",
"version": "3.3.7",
"jobId": 5
},
{
"jobId": 5,
"statusCode": 0,
"type": "status"
}
],
"timeExpired": false,
"command": "version",
"jobStatus": "TERMINATED",
"jobId": 5
}
}
\u54CD\u5E94\u6570\u636E\u89E3\u6790\uFF1A
state
: \u8BF7\u6C42\u5904\u7406\u72B6\u6001\uFF0C\u53C2\u8003\u201C\u63A5\u53E3\u54CD\u5E94\u72B6\u6001\u201D\u8BF4\u660EsessionId
: Arthas \u4F1A\u8BDD ID\uFF0C\u4E00\u6B21\u6027\u547D\u4EE4\u81EA\u52A8\u521B\u5EFA\u53CA\u9500\u6BC1\u4E34\u65F6\u4F1A\u8BDDbody.jobId
: \u547D\u4EE4\u7684\u4EFB\u52A1 ID\uFF0C\u540C\u4E00\u4EFB\u52A1\u8F93\u51FA\u7684\u6240\u6709 Result \u90FD\u662F\u76F8\u540C\u7684 jobIdbody.jobStatus
: \u4EFB\u52A1\u72B6\u6001\uFF0C\u540C\u6B65\u6267\u884C\u6B63\u5E38\u7ED3\u675F\u4E3ATERMINATED
body.timeExpired
: \u4EFB\u52A1\u6267\u884C\u662F\u5426\u8D85\u65F6body/results
: \u547D\u4EE4\u6267\u884C\u7684\u7ED3\u679C\u5217\u8868\u547D\u4EE4\u7ED3\u679C\u683C\u5F0F\u8BF4\u660E
[
{
"type": "version",
"version": "3.3.7",
"jobId": 5
},
{
"jobId": 5,
"statusCode": 0,
"type": "status"
}
]
type
: \u547D\u4EE4\u7ED3\u679C\u7C7B\u578B\uFF0C\u9664\u4E86status
\u7B49\u7279\u6B8A\u7684\u51E0\u4E2A\u5916\uFF0C\u5176\u5B83\u7684\u4FDD\u6301\u4E0E Arthas \u547D\u4EE4\u540D\u79F0\u4E00\u81F4\u3002\u8BF7\u53C2\u8003"\u7279\u6B8A\u547D\u4EE4\u7ED3\u679C"\u5C0F\u8282\u3002jobId
: \u5904\u7406\u547D\u4EE4\u7684\u4EFB\u52A1 ID\u3002\u6CE8\u610F\uFF1A\u4E5F\u53EF\u4EE5\u4F7F\u7528\u4E00\u6B21\u6027\u547D\u4EE4\u7684\u65B9\u5F0F\u6267\u884C watch/trace \u7B49\u8FDE\u7EED\u8F93\u51FA\u7684\u547D\u4EE4\uFF0C\u4F46\u4E0D\u80FD\u4E2D\u65AD\u547D\u4EE4\u6267\u884C\uFF0C\u53EF\u80FD\u51FA\u73B0\u957F\u65F6\u95F4\u6CA1\u6709\u7ED3\u675F\u7684\u95EE\u9898\u3002\u8BF7\u53C2\u8003"watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61"\u5C0F\u8282\u7684\u793A\u4F8B\u3002
\u8BF7\u5C3D\u91CF\u6309\u7167\u4EE5\u4E0B\u65B9\u5F0F\u5904\u7406\uFF1A
execTimeout
\uFF0C\u5230\u8FBE\u8D85\u65F6\u65F6\u95F4\u540E\u5F3A\u5236\u4E2D\u65AD\u547D\u4EE4\u6267\u884C\uFF0C\u907F\u514D\u957F\u65F6\u95F4\u6302\u8D77\u3002-n
\u53C2\u6570\u6307\u5B9A\u8F83\u5C11\u7684\u6267\u884C\u6B21\u6570\u3002-n 1
\u4E5F\u4F1A\u6302\u8D77\u7B49\u5F85\u5230\u6267\u884C\u8D85\u65F6\u3002\u7531\u7528\u6237\u521B\u5EFA\u53CA\u7BA1\u7406 Arthas \u4F1A\u8BDD\uFF0C\u9002\u7528\u4E8E\u590D\u6742\u7684\u4EA4\u4E92\u8FC7\u7A0B\u3002\u8BBF\u95EE\u6D41\u7A0B\u5982\u4E0B\uFF1A
curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"init_session"
}
'
\u54CD\u5E94\u7ED3\u679C\uFF1A
{
"sessionId": "b09f1353-202c-407b-af24-701b744f971e",
"consumerId": "5ae4e5fbab8b4e529ac404f260d4e2d1_1",
"state": "SUCCEEDED"
}
\u5F53\u524D\u4F1A\u8BDD ID \u4E3A\uFF1A b09f1353-202c-407b-af24-701b744f971e
\uFF0C \u5F53\u524D\u6D88\u8D39\u8005 ID \u4E3A\uFF1A5ae4e5fbab8b4e529ac404f260d4e2d1_1
\u3002
\u6307\u5B9A\u8981\u52A0\u5165\u7684\u4F1A\u8BDD ID\uFF0C\u670D\u52A1\u7AEF\u5C06\u5206\u914D\u4E00\u4E2A\u65B0\u7684\u6D88\u8D39\u8005 ID\u3002\u591A\u4E2A\u6D88\u8D39\u8005\u53EF\u4EE5\u63A5\u6536\u5230\u540C\u4E00\u4E2A\u4F1A\u8BDD\u7684\u547D\u4EE4\u7ED3\u679C\u3002\u672C\u63A5\u53E3\u7528\u4E8E\u652F\u6301\u591A\u4EBA\u5171\u4EAB\u540C\u4E00\u4E2A\u4F1A\u8BDD\u6216\u5237\u65B0\u9875\u9762\u540E\u91CD\u65B0\u62C9\u53D6\u4F1A\u8BDD\u5386\u53F2\u8BB0\u5F55\u3002
curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"join_session",
"sessionId" : "b09f1353-202c-407b-af24-701b744f971e"
}
'
\u54CD\u5E94\u7ED3\u679C\uFF1A
{
"consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
"sessionId": "b09f1353-202c-407b-af24-701b744f971e",
"state": "SUCCEEDED"
}
\u65B0\u7684\u6D88\u8D39\u8005 ID \u4E3A8f7f6ad7bc2d4cb5aa57a530927a95cc_2
\u3002
\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C\u6D88\u606F\u7684 action \u4E3Apull_results
\u3002\u8BF7\u4F7F\u7528 Http long-polling \u65B9\u5F0F\uFF0C\u5B9A\u65F6\u5FAA\u73AF\u62C9\u53D6\u7ED3\u679C\u6D88\u606F\u3002 \u6D88\u8D39\u8005\u7684\u8D85\u65F6\u65F6\u95F4\u4E3A 5 \u5206\u949F\uFF0C\u8D85\u65F6\u540E\u9700\u8981\u8C03\u7528join_session
\u5206\u914D\u65B0\u7684\u6D88\u8D39\u8005\u3002\u6BCF\u4E2A\u6D88\u8D39\u8005\u5355\u72EC\u5206\u914D\u4E00\u4E2A\u7F13\u5B58\u961F\u5217\uFF0C\u6309\u987A\u5E8F\u62C9\u53D6\u547D\u4EE4\u7ED3\u679C\uFF0C\u4E0D\u4F1A\u5F71\u54CD\u5230\u5176\u5B83\u6D88\u8D39\u8005\u3002
\u8BF7\u6C42\u53C2\u6570\u9700\u8981\u6307\u5B9A\u4F1A\u8BDD ID \u53CA\u6D88\u8D39\u8005 ID:
curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"pull_results",
"sessionId" : "b09f1353-202c-407b-af24-701b744f971e",
"consumerId" : "8f7f6ad7bc2d4cb5aa57a530927a95cc_2"
}
'
\u7528 Bash \u811A\u672C\u5B9A\u65F6\u62C9\u53D6\u7ED3\u679C\u6D88\u606F:
while true; do curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"pull_results",
"sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a",
"consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1"
}
' | json_pp; sleep 2; done
\u6CE8\uFF1A json_pp
\u5DE5\u5177\u5C06\u8F93\u51FA\u5185\u5BB9\u683C\u5F0F\u5316\u4E3A pretty json\u3002
\u54CD\u5E94\u5185\u5BB9\u5982\u4E0B\uFF1A
{
"body": {
"results": [
{
"inputStatus": "DISABLED",
"jobId": 0,
"type": "input_status"
},
{
"type": "message",
"jobId": 0,
"message": "Welcome to arthas!"
},
{
"tutorials": "https://arthas.aliyun.com/doc/arthas-tutorials.html",
"time": "2020-08-06 15:56:43",
"type": "welcome",
"jobId": 0,
"pid": "7909",
"wiki": "https://arthas.aliyun.com/doc",
"version": "3.3.7"
},
{
"inputStatus": "ALLOW_INPUT",
"type": "input_status",
"jobId": 0
}
]
},
"sessionId": "b09f1353-202c-407b-af24-701b744f971e",
"consumerId": "8f7f6ad7bc2d4cb5aa57a530927a95cc_2",
"state": "SUCCEEDED"
}
curl -Ss -XPOST http://localhost:8563/api -d '''
{
"action":"async_exec",
"command":"watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" ",
"sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a"
}
'''
async_exec
\u7684\u7ED3\u679C\uFF1A
{
"sessionId": "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a",
"state": "SCHEDULED",
"body": {
"jobStatus": "READY",
"jobId": 3,
"command": "watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" "
}
}
state
: SCHEDULED
\u72B6\u6001\u8868\u793A\u5DF2\u7ECF\u89E3\u6790\u547D\u4EE4\u751F\u6210\u4EFB\u52A1\uFF0C\u4F46\u672A\u5F00\u59CB\u6267\u884C\u3002body.jobId
: \u5F02\u6B65\u6267\u884C\u547D\u4EE4\u7684\u4EFB\u52A1 ID\uFF0C\u53EF\u4EE5\u6839\u636E\u6B64\u4EFB\u52A1 ID \u6765\u8FC7\u6EE4\u5728pull_results
\u8F93\u51FA\u7684\u547D\u4EE4\u7ED3\u679C\u3002body.jobStatus
: \u4EFB\u52A1\u72B6\u6001READY
\u8868\u793A\u672A\u5F00\u59CB\u6267\u884C\u3002\u67E5\u770B\u4E0A\u9762\u81EA\u52A8\u62C9\u53D6\u7ED3\u679C\u6D88\u606F\u811A\u672C\u7684 shell \u8F93\u51FA\uFF1A
{
"body" : {
"results" : [
{
"type" : "command",
"jobId" : 3,
"state" : "SCHEDULED",
"command" : "watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" "
},
{
"inputStatus" : "ALLOW_INTERRUPT",
"jobId" : 0,
"type" : "input_status"
},
{
"success" : true,
"jobId" : 3,
"effect" : {
"listenerId" : 3,
"cost" : 24,
"classCount" : 1,
"methodCount" : 1
},
"type" : "enhancer"
},
{
"sizeLimit" : 10485760,
"expand" : 1,
"jobId" : 3,
"type" : "watch",
"cost" : 0.071499,
"ts" : 1596703453237,
"value" : [
[
-170365
],
null,
{
"stackTrace" : [
{
"className" : "demo.MathGame",
"classLoaderName" : "app",
"methodName" : "primeFactors",
"nativeMethod" : false,
"lineNumber" : 46,
"fileName" : "MathGame.java"
},
...
],
"localizedMessage" : "number is: -170365, need >= 2",
"@type" : "java.lang.IllegalArgumentException",
"message" : "number is: -170365, need >= 2"
}
]
},
{
"type" : "watch",
"cost" : 0.033375,
"jobId" : 3,
"ts" : 1596703454241,
"value" : [
[
1
],
[
2,
2,
2,
2,
13,
491
],
null
],
"sizeLimit" : 10485760,
"expand" : 1
}
]
},
"consumerId" : "8ecb9cb7c7804d5d92e258b23d5245cc_1",
"sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a",
"state" : "SUCCEEDED"
}
watch \u547D\u4EE4\u7ED3\u679C\u7684value
\u4E3A watch-experss \u7684\u503C\uFF0C\u4E0A\u9762\u547D\u4EE4\u4E2D\u4E3A{params, returnObj, throwExp}
\uFF0C\u6240\u4EE5 watch \u7ED3\u679C\u7684 value \u4E3A\u4E00\u4E2A\u957F\u5EA6\u4E3A 3 \u7684\u6570\u7EC4\uFF0C\u6BCF\u4E2A\u5143\u7D20\u5206\u522B\u5BF9\u5E94\u76F8\u5E94\u987A\u5E8F\u7684\u8868\u8FBE\u5F0F\u3002 \u8BF7\u53C2\u8003"watch \u547D\u4EE4\u8F93\u51FA map \u5BF9\u8C61"\u5C0F\u8282\u3002
\u4E2D\u65AD\u4F1A\u8BDD\u6B63\u5728\u8FD0\u884C\u7684\u524D\u53F0 Job\uFF08\u524D\u53F0\u4EFB\u52A1\uFF09\uFF1A
curl -Ss -XPOST http://localhost:8563/api -d '''
{
"action":"interrupt_job",
"sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a"
}
'''
{
"state" : "SUCCEEDED",
"body" : {
"jobStatus" : "TERMINATED",
"jobId" : 3
}
}
\u6307\u5B9A\u4F1A\u8BDD ID\uFF0C\u5173\u95ED\u4F1A\u8BDD\u3002
curl -Ss -XPOST http://localhost:8563/api -d '''
{
"action":"close_session",
"sessionId" : "2b085b5d-883b-4914-ab35-b2c5c1d5aa2a"
}
'''
{
"state": "SUCCEEDED"
}
\u5DF2\u5B9E\u73B0\u529F\u80FD\uFF1A
\u5F85\u5F00\u53D1\u529F\u80FD\uFF1A
{
"jobId": 5,
"statusCode": 0,
"type": "status"
}
type
\u4E3Astatus
\u8868\u793A\u547D\u4EE4\u6267\u884C\u72B6\u6001\uFF1A
\u6BCF\u4E2A\u547D\u4EE4\u6267\u884C\u7ED3\u675F\u540E\u90FD\u6709\u552F\u4E00\u4E00\u4E2A status \u7ED3\u679C\u3002statusCode
\u4E3A 0 \u8868\u793A\u6267\u884C\u6210\u529F\uFF0CstatusCode
\u4E3A\u975E 0 \u503C\u8868\u793A\u6267\u884C\u5931\u8D25\uFF0C\u7C7B\u4F3C\u8FDB\u7A0B\u9000\u51FA\u7801(exit code)\u3002
\u547D\u4EE4\u6267\u884C\u5931\u8D25\u65F6\u4E00\u822C\u4F1A\u63D0\u4F9B\u9519\u8BEF\u6D88\u606F\uFF0C\u5982\uFF1A
{
"jobId": 3,
"message": "The argument 'class-pattern' is required",
"statusCode": -10,
"type": "status"
}
{
"inputStatus": "ALLOW_INPUT",
"type": "input_status",
"jobId": 0
}
type
\u4E3Ainput_status
\u8868\u793A\u8F93\u5165\u72B6\u6001\uFF1A
\u7528\u4E8E UI \u4EA4\u4E92\u65F6\u63A7\u5236\u7528\u6237\u8F93\u5165\uFF0C\u6BCF\u6B21\u6267\u884C\u547D\u4EE4\u524D\u540E\u4F1A\u53D1\u9001\u6539\u53D8\u7684\u6D88\u606F\u3002 inputStatus
\u7684\u503C\u8BF4\u660E\uFF1A
ALLOW_INPUT
: \u5141\u8BB8\u7528\u6237\u8F93\u5165\u547D\u4EE4\uFF0C\u8868\u793A\u4F1A\u8BDD\u6CA1\u6709\u5728\u6267\u884C\u7684\u524D\u53F0\u547D\u4EE4\uFF0C\u53EF\u4EE5\u63A5\u53D7\u65B0\u7684\u547D\u4EE4\u3002ALLOW_INTERRUPT
: \u5141\u8BB8\u7528\u6237\u4E2D\u65AD\u547D\u4EE4\u6267\u884C\uFF0C\u8868\u793A\u5F53\u524D\u6B63\u5728\u6267\u884C\u547D\u4EE4\uFF0C\u7528\u6237\u53EF\u4EE5\u53D1\u9001interrupt_job
\u4E2D\u65AD\u6267\u884C\u3002DISABLED
: \u7981\u7528\u72B6\u6001\uFF0C\u4E0D\u80FD\u8F93\u5165\u547D\u4EE4\u4E5F\u4E0D\u80FD\u4E2D\u65AD\u547D\u4EE4\u3002{
"type": "command",
"jobId": 3,
"state": "SCHEDULED",
"command": "watch demo.MathGame primeFactors \\"{params, returnObj, throwExp}\\" "
}
type
\u4E3Acommand
\u8868\u793A\u8F93\u5165\u7684\u547D\u4EE4\u6570\u636E\uFF1A
\u7528\u4E8E\u4EA4\u4E92 UI \u56DE\u663E\u7528\u6237\u8F93\u5165\u7684\u547D\u4EE4\uFF0C\u62C9\u53D6\u7684\u4F1A\u8BDD\u547D\u4EE4\u6D88\u606F\u5386\u53F2\u4F1A\u5305\u542Bcommand
\u7C7B\u578B\u7684\u6D88\u606F\uFF0C\u6309\u987A\u5E8F\u5904\u7406\u5373\u53EF\u3002
{
"success": true,
"jobId": 3,
"effect": {
"listenerId": 3,
"cost": 24,
"classCount": 1,
"methodCount": 1
},
"type": "enhancer"
}
type
\u4E3Aenhancer
\u8868\u793A\u7C7B\u589E\u5F3A\u7ED3\u679C\uFF1A
trace/watch/jad/tt
\u7B49\u547D\u4EE4\u9700\u8981\u5BF9\u7C7B\u8FDB\u884C\u589E\u5F3A\uFF0C\u4F1A\u63A5\u6536\u5230\u8FD9\u4E2Aenhancer
\u7ED3\u679C\u3002\u53EF\u80FD\u51FA\u73B0enhancer
\u7ED3\u679C\u6210\u529F\uFF0C\u4F46\u6CA1\u6709\u547D\u4E2D\u65B9\u6CD5\u7684\u60C5\u51B5\uFF0C\u5BA2\u6237\u7AEF\u53EF\u4EE5\u6839\u636Eenhancer
\u7ED3\u679C\u63D0\u793A\u7528\u6237\u3002
\u901A\u8FC7 Http api \u67E5\u8BE2 Java \u5E94\u7528\u7684 System properties\uFF0C\u63D0\u53D6java.class.path
\u7684\u503C\u3002
json_data=$(curl -Ss -XPOST http://localhost:8563/api -d '
{
"action":"exec",
"command":"sysprop"
}')
sed
\u63D0\u53D6\u503C\uFF1Aclass_path=$(echo $json_data | tr -d '\\n' | sed 's/.*"java.class.path":"\\([^"]*\\).*/\\1/')
echo "classpath: $class_path"
json_pp/awk
\u63D0\u53D6\u503Cclass_path=$(echo $json_data | tr -d '\\n' | json_pp | grep java.class.path | awk -F'"' '{ print $4 }')
echo "classpath: $class_path"
\u8F93\u51FA\u5185\u5BB9\uFF1A
classpath: demo-arthas-spring-boot.jar
\u6CE8\u610F\uFF1A
echo $json_data | tr -d '\\n'
: \u5220\u9664\u6362\u884C\u7B26(line.separator
\u7684\u503C)\uFF0C\u907F\u514D\u5F71\u54CDsed
/json_pp
\u547D\u4EE4\u5904\u7406\u3002awk -F'"' '{ print $4 }'
: \u4F7F\u7528\u53CC\u5F15\u53F7\u4F5C\u4E3A\u5206\u9694\u7B26\u53F7\u63D0\u793A
Maps can also be created using a special syntax.
#{ "foo" : "foo value", "bar" : "bar value" }
This creates a Map initialized with mappings for "foo" and "bar".
\u4E0B\u9762\u7684\u547D\u4EE4\u751F\u6210 map \u683C\u5F0F\u7684\u503C\uFF1A
watch *MathGame prime* '#{ "params" : params, "returnObj" : returnObj, "throwExp": throwExp}' -x 2 -n 5
\u5728 Telnet shell/WebConsole \u4E2D\u6267\u884C\u4E0A\u9762\u7684\u547D\u4EE4\uFF0C\u8F93\u51FA\u7684\u7ED3\u679C\uFF1A
ts=2020-08-06 16:57:20; [cost=0.241735ms] result=@LinkedHashMap[
@String[params]:@Object[][
@Integer[1],
],
@String[returnObj]:@ArrayList[
@Integer[2],
@Integer[241],
@Integer[379],
],
@String[throwExp]:null,
]
\u7528 Http api \u6267\u884C\u4E0A\u9762\u7684\u547D\u4EE4\uFF0C\u6CE8\u610F\u5BF9 JSON \u53CC\u5F15\u53F7\u8F6C\u4E49\uFF1A
curl -Ss -XPOST http://localhost:8563/api -d @- << EOF
{
"action":"exec",
"execTimeout": 30000,
"command":"watch *MathGame prime* '#{ \\"params\\" : params, \\"returnObj\\" : returnObj, \\"throwExp\\": throwExp}' -n 3 "
}
EOF
Http api \u6267\u884C\u7ED3\u679C\uFF1A
{
"body": {
...
"results": [
...
{
...
"type": "watch",
"value": {
"params": [
1
],
"returnObj": [
2,
5,
17,
23,
23
]
}
},
{
...
"type": "watch",
"value": {
"params": [
-98278
],
"throwExp": {
"@type": "java.lang.IllegalArgumentException",
"localizedMessage": "number is: -98278, need >= 2",
"message": "number is: -98278, need >= 2",
"stackTrace": [
...
]
}
}
},
...
}
\u53EF\u4EE5\u770B\u5230 watch \u7ED3\u679C\u7684 value \u53D8\u6210 map \u5BF9\u8C61\uFF0C\u7A0B\u5E8F\u53EF\u4EE5\u901A\u8FC7 key \u8BFB\u53D6\u7ED3\u679C\u3002
`,10);function L(P,U){const e=o("ExternalLinkIcon"),p=o("RouterLink");return c(),u("div",null,[v,s("p",null,[s("a",k,[b,m,a(e)])]),q,s("p",null,[h,a(p,{to:"/doc/auth.html"},{default:r(()=>[g]),_:1})]),y,_,s("p",null,[j,s("a",f,[x,a(e)]),I]),E,s("p",null,[S,w,D,s("a",C,[T,a(e)]),A]),O])}var H=l(d,[["render",L],["__file","http-api.html.vue"]]);export{H as default};