一、pom引入以下依赖
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
二、JAVA发送HTTP请求
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.xml.bind.DatatypeConverter;
import java.io.IOException;
import java.net.URLEncoder;
/**
* <p>
* httpClient请求 带Authorization(授权)username password的REST API 返回JSON数据
* </P>
*
* @author lemon
* @since 2019-5-20
*/
public class HttpClientHelper {
public String sendPost(String urlParam) throws HttpException, IOException {
// 创建httpClient实例对象
HttpClient httpClient = new HttpClient();
// 设置httpClient连接主机服务器超时时间:15000毫秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
//username:password--->访问的用户名,密码,并使用base64进行加密,将加密的字节信息转化为string类型,encoding--->token
String encoding = DatatypeConverter.printBase64Binary("Username:Password".getBytes("UTF-8"));
// 创建post请求方法实例对象
PostMethod postMethod = new PostMethod(urlParam);
// 设置post请求超时时间
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
//Httpclient 请求带Authorization(授权)授权类型因人而异,自行查看
postMethod.setRequestHeader("Authorization", "Basic " + encoding);
postMethod.addRequestHeader("Content-Type", "application/json");
httpClient.executeMethod(postMethod);
String result = postMethod.getResponseBodyAsString();
postMethod.releaseConnection();
return result;
}
public String sendGet(String urlParam) throws HttpException, IOException {
// 创建httpClient实例对象
HttpClient httpClient = new HttpClient();
// 设置httpClient连接主机服务器超时时间:15000毫秒
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
//username:password--->访问的用户名,密码,并使用base64进行加密,将加密的字节信息转化为string类型,encoding--->token
String encoding = DatatypeConverter.printBase64Binary("Username:Password".getBytes("UTF-8"));
// 创建GET请求方法实例对象
GetMethod getMethod = new GetMethod(urlParam);
// 设置post请求超时时间
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
getMethod.setRequestHeader("Authorization", "Basic " + encoding);
getMethod.addRequestHeader("Content-Type", "application/json");
httpClient.executeMethod(getMethod);
String result = getMethod.getResponseBodyAsString();
getMethod.releaseConnection();
return result;
}
}
三、JAVA数据接口
/**
* <p>
* JAVA数据接口
* data from Ambari
* </p>
*
* @author lemon
* @since 2019-05-20
*/
@RestController
@RequestMapping("/AmbariDataMonitor")
public class AmbariDataMonitorController extends BaseController {
/**
* <p>
* metrics cpu
* </p>
*
* @return Object
* @author lemon
* @since 2019-05-20
*/
@PostMapping(value = "/metricsCpu")
@ResponseBody
public Object selectMetricsCpu() throws IOException {
HttpClientHelper httpClientHelper = new HttpClientHelper();
long currentTimeMillis = System.currentTimeMillis();
//这个url只是举例子,不必当真
String url = "http://你的AmbariIP地址:端口/api/v1/clusters/集群名称/hosts/主机名?fields=metrics/cpu&_=1558328607070" ;
//调用httpClient请求
String result = httpClientHelper.sendGet(url);
return result;
}
}
返回样例
{
"href" : "http://你的AmbariIP地址:端口/api/v1/clusters/集群名称/hosts/主机名?fields=metrics/cpu&_=1558328607070" \\",
"Hosts" : {
"cluster_name" : "集群名称",
"host_name" : "主机名"
},
"metrics" : {
"cpu" : {
"cpu_idle" : 87.6,
"cpu_nice" : 0.0,
"cpu_num" : 8.0,
"cpu_system" : 3.4,
"cpu_user" : 8.7,
"cpu_wio" : 0.2
}
}
}
四、关于去访问Ambari URL相关问题
方法一:
打开浏览器访问部署好的Ambari地址
F12打开控制台- - -Network 会有实时的访问路径
例如:
以上只是举例子,但此方法优缺点,有些找不到
方法二:
下载Ambari安装包- - - 参 看 源 码
http://apache.fayea.com/ambari/ambari-2.7.3/
解压安装包- - - 我使用的数据url在此目录下
apache-ambari-2.7.3-src\ambari-web\app\assets\data\dashboard\HDP2
都是json文件,打开查看就OK,看是否符合自己需求
能力不足水平有限
有问题别说脏话
欢迎前来学习交流
email:1848199654@qq.com