mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-09 16:23:27 +08:00
- 新增 JMX/Endpoint/Agent 三种 JVM 连接模式与配置归一化链路 - 支持资源浏览、变更预览、写入应用、审计记录与只读约束 - 接入 AI 结构化写入计划与诊断计划回填能力 - 新增 Agent Bridge、Arthas Tunnel、JMX Helper 诊断传输实现 - 增加诊断控制台、命令模板、输出历史与自动补全交互 - 补齐前后端契约、运行夹具与 JVM 相关回归测试
47 lines
1.7 KiB
Java
47 lines
1.7 KiB
Java
package com.gonavi.jmxhelper;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.InputStream;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.Map;
|
|
|
|
public final class JmxHelperMain {
|
|
private JmxHelperMain() {
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
Map<String, Object> response = new LinkedHashMap<>();
|
|
try {
|
|
Map<String, Object> request = readRequest(System.in);
|
|
response.putAll(JmxRuntime.handle(request));
|
|
response.put("ok", Boolean.TRUE);
|
|
} catch (Throwable error) {
|
|
response.clear();
|
|
response.put("ok", Boolean.FALSE);
|
|
response.put("error", error.getMessage() == null ? error.getClass().getName() : error.getMessage());
|
|
Map<String, Object> details = new LinkedHashMap<>();
|
|
details.put("exception", error.getClass().getName());
|
|
response.put("details", details);
|
|
}
|
|
System.out.print(MiniJson.stringify(response));
|
|
System.out.flush();
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
private static Map<String, Object> readRequest(InputStream inputStream) throws Exception {
|
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
|
byte[] chunk = new byte[4096];
|
|
int read;
|
|
while ((read = inputStream.read(chunk)) >= 0) {
|
|
buffer.write(chunk, 0, read);
|
|
}
|
|
String payload = new String(buffer.toByteArray(), StandardCharsets.UTF_8);
|
|
Object parsed = MiniJson.parse(payload);
|
|
if (!(parsed instanceof Map<?, ?>)) {
|
|
throw new IllegalArgumentException("helper request must be a JSON object");
|
|
}
|
|
return (Map<String, Object>) parsed;
|
|
}
|
|
}
|