访问HetuEngine HSConsole的Rest API的样例代码
【摘要】 FusionInsight HetuEngine访问HSConsole的样例代码
1. pom.xml的文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.huawei.hetu</groupId>
<artifactId>hsconsoleClient</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>
-
HTTP的GET/POST/PUT等操作的封装Utils类
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*/
package com.huawei.hsconsole;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.protocol.HttpContext;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.List;
import java.util.Optional;
/**
* The HttpUtils
*
* @since 2020-01-07
*/
public class HttpUtils {
/**
* The http request connect timeout.
*/
public static final Integer DEFAULT_CONNECT_TIMEOUT = 60000;
/**
* The socket connect timeout.
*/
public static final Integer DEFAULT_SOCKET_TIMEOUT = 60000;
/**
* Http Get.
*
* @param httpClient The http client.
* @param url Target server url.
* @param paramList paramL list
* @param requestConfig requestConfig
* @param context http context
* @return HttpResponse.
* @throws Exception If failed to excute http get action.
*/
public static HttpResponse httpGet(
HttpClient httpClient,
String url,
List<NameValuePair> paramList,
RequestConfig requestConfig,
HttpContext context) throws Exception {
URIBuilder uriBuilder = new URIBuilder(url);
if (paramList != null && !paramList.isEmpty()) {
uriBuilder.setParameters(paramList);
}
HttpGet httpGet = new HttpGet(uriBuilder.build());
setHttpConfig(httpGet, requestConfig);
if (context == null) {
return httpClient.execute(httpGet);
} else {
return httpClient.execute(httpGet, context);
}
}
/**
* Http Post.
*
* @param httpClient The http client.
* @param url Target server url.
* @param entity HttpEntity.
* @param requestConfig requestConfig
* @param context http context
* @param headers http request heads
* @return HttpResponse.
* @throws Exception If failed to excute http post action.
*/
public static HttpResponse httpPost(
HttpClient httpClient,
String url,
HttpEntity entity,
RequestConfig requestConfig,
HttpContext context,
Header[] headers) throws Exception {
HttpPost httpPost = new HttpPost(url);
setHttpConfig(httpPost, requestConfig);
if (entity != null) {
httpPost.setEntity(entity);
}
if (headers != null) {
for (Header header : headers) {
httpPost.addHeader(header);
}
}
if (context == null) {
return httpClient.execute(httpPost);
} else {
return httpClient.execute(httpPost, context);
}
}
/**
* Http Put.
*
* @param httpClient The http client.
* @param url Target server url.
* @param entity HttpEntity.
* @param requestConfig Http requestConfig
* @param context http context
* @param headers http head
* @return HttpResponse.
* @throws Exception If failed to excute http post action.
*/
public static HttpResponse httpPut(
HttpClient httpClient,
String url,
HttpEntity entity,
RequestConfig requestConfig,
HttpContext context,
Header[] headers) throws Exception {
HttpPut httpPut = new HttpPut(url);
setHttpConfig(httpPut, requestConfig);
if (entity != null) {
httpPut.setEntity(entity);
}
if (headers != null) {
for (Header header : headers) {
httpPut.addHeader(header);
}
}
if (context == null) {
return httpClient.execute(httpPut);
} else {
return httpClient.execute(httpPut, context);
}
}
/**
* Http Delete.
*
* @param httpClient The http client.
* @param url Target server url.
* @param requestConfig requestConfig
* @param context context
* @param headers http head
* @return HttpResponse.
* @throws Exception If failed to excute http delete action.
*/
public static HttpResponse httpDelete(
HttpClient httpClient,
String url,
RequestConfig requestConfig,
HttpContext context,
Header[] headers) throws Exception {
HttpDelete httpDelete = new HttpDelete(url);
setHttpConfig(httpDelete, requestConfig);
if (headers != null) {
for (Header header : headers) {
httpDelete.addHeader(header);
}
}
if (context == null) {
return httpClient.execute(httpDelete);
} else {
return httpClient.execute(httpDelete, context);
}
}
private static void setHttpConfig(HttpRequestBase httpRequestBase, RequestConfig requestConfig) {
RequestConfig noNullRequestConfig = Optional.ofNullable(requestConfig)
.orElse(RequestConfig.custom()
.setSocketTimeout(DEFAULT_SOCKET_TIMEOUT)
.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT)
.build());
httpRequestBase.setConfig(noNullRequestConfig);
}
}
-
进行Cas认证并且返回HttpClient的代码,getHttpClient传入cas地址,HSConsole地址,用户名,密码进行cas认证,并且返回已经认证通过的CAS Client。
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
*/
package com.huawei.hsconsole;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* The HSConsoleHttpClient
*
* @since 2020-05-01
*/
public class HSConsoleHttpClient {
private static final int STRING_UNFOUND = -1;
private String getPageIt(HttpEntity entity) throws IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
String tempLine = rd.readLine();
String itFlag = "<input type=\"hidden\" name=\"lt\" value=\"";
String lt = "";
while (tempLine != null) {
int index = tempLine.indexOf(itFlag);
if (index != STRING_UNFOUND) {
String s1 = tempLine.substring(index + itFlag.length());
int index1 = s1.indexOf("\"");
if (index1 != STRING_UNFOUND) {
lt = s1.substring(0, index1);
}
}
tempLine = rd.readLine();
}
return lt;
}
/**
* close the http client.
*
* @param httpClient The http client need to be closed.
*/
public void closeClient(CloseableHttpClient httpClient) {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
System.out.println("httpClient clone fail.");
}
}
}
/**
* close the http response.
*
* @param response The http client need to be closed.
*/
public void closeResponse(CloseableHttpResponse response) {
if (response != null) {
try {
response.close();
} catch (IOException e) {
System.out.println("response clone fail.");
}
}
}
/**
* login fi cas.
*
* @param httpClient The http client.
* @param lt login ticket
* @param casUrl cas url
* @param hsconsoleUrl hsconsole url
* @param context http context
*/
private boolean loginCas(CloseableHttpClient httpClient, String lt, String casUrl, String hsconsoleUrl, HttpClientContext context, String user, String passworld) throws Exception {
List<NameValuePair> nvps = new ArrayList<>();
nvps.add(new BasicNameValuePair("username", user));
nvps.add(new BasicNameValuePair("password", passworld));
nvps.add(new BasicNameValuePair("lt", lt));
nvps.add(new BasicNameValuePair("_eventId", "submit"));
nvps.add(new BasicNameValuePair("submit", "Login"));
HttpEntity entity1 = new UrlEncodedFormEntity(nvps, "UTF-8");
CloseableHttpResponse casResponse = (CloseableHttpResponse) HttpUtils.httpPost(httpClient, casUrl, entity1, null, context, null);
closeResponse(casResponse);
CloseableHttpResponse hsConsoleResponse = (CloseableHttpResponse) HttpUtils.httpGet(httpClient, hsconsoleUrl, null, null, context);
String hsConsoleHtml = EntityUtils.toString(hsConsoleResponse.getEntity());
if (hsConsoleHtml.contains("script src=\"runtime") && hsConsoleHtml.contains("script src=\"polyfills")) {
System.out.println("log success.");
closeResponse(hsConsoleResponse);
return true;
} else {
System.out.println("log fail.");
closeResponse(hsConsoleResponse);
return false;
}
}
/**
* get http client.
*
* @param casUrl cas url.
* @param hsconsoleUrl hsconsole url
* @param user user
* @param passworld passworld
* @return http client
* @throws Exception IOException or CasAuthException
*/
public CloseableHttpClient getHttpClient(String casUrl, String hsconsoleUrl, String user, String passworld) throws Exception {
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
CloseableHttpResponse response = (CloseableHttpResponse) HttpUtils.httpGet(httpClient, hsconsoleUrl, null, null, context);
String pageIt = getPageIt(response.getEntity());
if (pageIt.isEmpty()) {
System.out.println(String.format("cannot get page it from %s, respone code is %s, response entity is %s.", hsconsoleUrl, response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity())));
closeResponse(response);
closeClient(httpClient);
throw new Exception(hsconsoleUrl + " cas authentication failed.");
}
if (loginCas(httpClient, pageIt, casUrl, hsconsoleUrl, context, user, passworld)) {
return httpClient;
} else {
closeClient(httpClient);
throw new Exception("cas authentication failed.");
}
}
}
-
Main函数操作样例,以获取当前正在运行的查询任务和停止某一个任务为例:
package com.huawei.hsconsole;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class HsconsoleClient {
public static void main(String[] args) throws Exception {
System.setProperty("javax.net.ssl.trustStore", "E:\\OneQuery\\OneQueryResource\\RestApiDemo\\hsconsoleClient\\src\\main\\resources\\hsconsole.jks");
String casUrl = "https://192.168.67.137:20009/cas/login?service=https%3A%2F%2F192.168.67.137%3A20026%2FHetuEngine%2FHSConsole%2F15%2F";
String hsconsoleUrl = "https://192.168.67.137:20026/HetuEngine/HSConsole/15/#/hsconsole/cluster";
String user = "yourName";
String passworld = "yourPassword";
CloseableHttpClient httpClient = null;
HSConsoleHttpClient hsConsoleHttpClient = new HSConsoleHttpClient();
httpClient = hsConsoleHttpClient.getHttpClient(casUrl, hsconsoleUrl, user, passworld);
getQuery(httpClient);
killQuery(httpClient);
}
public static void getQuery(CloseableHttpClient httpClient) throws IOException {
// url以集群版本的API接口文档为准,不同的版本可能会有不同
String operationUrl = "https://192.168.67.137:20026/HetuEngine/HSConsole/15/v1/hsconsole/query/running/default";
HttpGet httpGet = new HttpGet(operationUrl);
httpGet.addHeader("Content-Type", "application/json;charset=UTF-8");
HttpResponse httpResponse = httpClient.execute(httpGet);
System.out.println(httpResponse.getStatusLine().getStatusCode());
InputStream in = httpResponse.getEntity().getContent();
String str = IOUtils.toString(in, StandardCharsets.UTF_8);
System.out.println(str);
}
public static void killQuery(CloseableHttpClient httpClient) throws IOException {
String operationUrl = "https://192.168.67.137:20026/HetuEngine/HSConsole/15/v1/hsconsole/query/kill/20200927_024126_00001_t3xdi@default@HetuEngine";
HttpDelete httpDelete = new HttpDelete(operationUrl);
httpDelete.addHeader("Content-Type", "application/json;charset=UTF-8");
HttpResponse httpResponse = httpClient.execute(httpDelete);
System.out.println(httpResponse.getStatusLine().getStatusCode());
}
}
-
测试验证
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)