package mobvista.dmp.datasource.rtdmp; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import mobvista.dmp.common.Constants; import mobvista.dmp.util.DateUtil; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.Tuple4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @package: mobvista.dmp.datasource.rtdmp * @author: wangjf * @date: 2020/7/20 * @time: 4:44 下午 * @email: jinfeng.wang@mobvista.com * @phone: 152-1062-7698 */ public class ServerUtil { public static final Logger logger = LoggerFactory.getLogger(ServerUtil.class); // private final static String BASE_URL = PropertyUtil.getProperty("config.properties", "rtdmp.url"); private final static String BASE_URL = "http://ip-172-31-29-117:8688/"; // private final static String BASE_URL = "http://107.21.162.31:8688/"; // Map<id,<paths,data_update_method,audience_type,audience_rules>> public static Map<Integer, Tuple4<JSONArray, Integer, Integer, JSONObject>> request( String update_time_start, String update_time_end, Long audience_data_utime_start, Long audience_data_utime_end, int audienceType, int minAudienceDataStatus, int maxAudienceDataStatus) { logger.info("update_time_start -->>" + update_time_start + ",update_time_end -->> " + update_time_end + ",audience_data_utime_start -->> " + audience_data_utime_start + ",audience_data_utime_end -->> " + audience_data_utime_end + ",audience_type -->> " + audienceType); CloseableHttpClient client = HttpClients.createDefault(); List<BasicNameValuePair> formparams = new ArrayList<>(); String serverUrl = BASE_URL + "rtdmp/query"; URIBuilder uri = new URIBuilder(); try { uri = new URIBuilder(serverUrl) .addParameter("update_time_start", update_time_start) .addParameter("update_time_end", update_time_end) .addParameter("audience_data_utime_start", String.valueOf(audience_data_utime_start)) .addParameter("audience_data_utime_end", String.valueOf(audience_data_utime_end)) .addParameter("audience_type", String.valueOf(audienceType)) .addParameter("min_audience_data_status", String.valueOf(minAudienceDataStatus)) .addParameter("max_audience_data_status", String.valueOf(maxAudienceDataStatus)); } catch (URISyntaxException e) { e.printStackTrace(); } RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000).setConnectionRequestTimeout(5000) .setSocketTimeout(5000).build(); HttpGet httpGet = new HttpGet(); try { logger.info("uri -->> " + uri.build()); httpGet = new HttpGet(uri.build()); } catch (URISyntaxException e) { e.printStackTrace(); } httpGet.setHeader("Auth-System", "dmp"); httpGet.setHeader("Content-Type", "text/plain"); JSONArray jsonArray; CloseableHttpResponse response; Map<Integer, Tuple4<JSONArray, Integer, Integer, JSONObject>> map = new HashMap<>(); JSONObject jsonObject; try { response = client.execute(httpGet); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } jsonObject = Constants.String2JSONObject(result.toString()); } catch (IOException e) { jsonObject = new JSONObject(); logger.info(e.getMessage()); } finally { httpGet.abort(); } for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { JSONObject valueJson = Constants.String2JSONObject(entry.getValue().toString()); map.put(Integer.parseInt(entry.getKey()), new Tuple4<>(valueJson.getJSONArray("paths"), valueJson.getInteger("data_update_method"), valueJson.getInteger("audience_type"), valueJson.getJSONObject("audience_rules"))); } return map; } public static JSONArray history(int audienceId) throws URISyntaxException { CloseableHttpClient client = HttpClients.createDefault(); List<BasicNameValuePair> formparams = new ArrayList<>(); final String serverUrl = BASE_URL + "rtdmp/audience/history"; URIBuilder uri = new URIBuilder(); try { uri = new URIBuilder(serverUrl).addParameter("audience_id", String.valueOf(audienceId)); } catch (URISyntaxException e) { e.printStackTrace(); } RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(1000).setConnectionRequestTimeout(1000) .setSocketTimeout(1000).build(); final HttpGet httpGet = new HttpGet(uri.build()); httpGet.setHeader("Auth-System", "dmp"); httpGet.setHeader("Content-Type", "text/plain"); JSONArray jsonArray = new JSONArray(); CloseableHttpResponse response; try { response = client.execute(httpGet); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } JSONObject jsonObject = Constants.String2JSONObject(result.toString()); if (jsonObject.getInteger("code") == 200 && jsonObject.containsKey("data")) { jsonArray = jsonObject.getJSONArray("data"); } } catch (IOException e) { try { response = client.execute(httpGet); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } JSONObject jsonObject = Constants.String2JSONObject(result.toString()); if (jsonObject.getInteger("code") == 200 && jsonObject.containsKey("data")) { jsonArray = jsonObject.getJSONArray("data"); } } catch (IOException ex) { jsonArray = new JSONArray(); } } finally { httpGet.abort(); } for (int i = 0; i < jsonArray.size(); i++) { jsonArray.getJSONObject(i).remove("audience_id"); jsonArray.getJSONObject(i).put("update_time", DateUtil.format(jsonArray.getJSONObject(i).getString("update_time"), "yyyy-MM-dd HH")); } return jsonArray; } public static JSONObject upload(JSONArray requestBody) { logger.info("requestBody upload -->> " + requestBody); CloseableHttpClient client = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000).setConnectionRequestTimeout(5000) .setSocketTimeout(5000).build(); final String serverUrl = BASE_URL + "rtdmp/upload"; HttpPost post = new HttpPost(serverUrl); JSONObject jsonObject = new JSONObject(); HttpResponse response; try { post.setConfig(requestConfig); post.setEntity(new StringEntity(requestBody.toJSONString())); response = client.execute(post); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } jsonObject = JSON.parseObject(result.toString()); } catch (IOException e) { logger.info("IOException -->> " + e.getMessage()); } finally { post.abort(); } logger.info("jsonObject -->> " + jsonObject.toJSONString()); return jsonObject; } public static JSONObject update(JSONArray requestBody) { logger.info("requestBody update -->> " + requestBody); CloseableHttpClient client = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(5000).setConnectionRequestTimeout(5000) .setSocketTimeout(5000).build(); final String serverUrl = BASE_URL + "rtdmp/update"; HttpPost post = new HttpPost(serverUrl); JSONObject jsonObject = new JSONObject(); HttpResponse response; try { post.setConfig(requestConfig); post.setEntity(new StringEntity(requestBody.toJSONString())); response = client.execute(post); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } jsonObject = JSON.parseObject(result.toString()); } catch (IOException e) { logger.info("IOException -->> " + e.getMessage()); } finally { post.abort(); } logger.info("jsonObject -->> " + jsonObject.toJSONString()); return jsonObject; } public static int query(String audienceName) throws URISyntaxException { logger.info("audienceName -->> " + audienceName); CloseableHttpClient client = HttpClients.createDefault(); List<BasicNameValuePair> formparams = new ArrayList<>(); final String serverUrl = BASE_URL + "rtdmp/queryByName"; URIBuilder uri = new URIBuilder(); try { uri = new URIBuilder(serverUrl).addParameter("audience_name", audienceName); } catch (URISyntaxException e) { e.printStackTrace(); } RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(1000).setConnectionRequestTimeout(1000) .setSocketTimeout(1000).build(); final HttpGet httpGet = new HttpGet(uri.build()); httpGet.setHeader("Auth-System", "dmp"); httpGet.setHeader("Content-Type", "text/plain"); int audienceId = 0; CloseableHttpResponse response; try { response = client.execute(httpGet); BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent())); StringBuilder result = new StringBuilder(); String line; while ((line = rd.readLine()) != null) { result.append(line); } JSONObject jsonObject = Constants.String2JSONObject(result.toString()); if (!jsonObject.isEmpty() && jsonObject.containsKey("id") && jsonObject.getString("audience_name").equals(audienceName)) { audienceId = jsonObject.getIntValue("id"); } } catch (IOException e) { logger.info(e.getMessage()); } finally { httpGet.abort(); } return audienceId; } }