content: /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package com.dianping.cosmos.monitor;
  
  import java.io.IOException;
  import java.net.URI;
  import java.net.URL;
  import java.util.List;
  
  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.entity.UrlEncodedFormEntity;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.client.methods.HttpUriRequest;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.apache.http.params.CoreConnectionPNames;
  import org.apache.http.util.EntityUtils;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  
  /**
   * 向cat写入metric相关信息
   * @author xinchun.wang
   *
   */
  public class HttpClientService {
  	
  	private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientService.class);
  	
  //	private static JSONUtil jsonUtil = JSONUtil.getInstance();
  	
  	protected String excuteGet(String url, boolean useURI) throws Exception {
  		HttpClient httpClient = getHttpClient();
  		HttpUriRequest request = getGetRequest(url, useURI);
  		
  		HttpResponse httpResponse = httpClient.execute(request);
  
  		String response = parseResponse(url, httpResponse);
  		return response;
  	}
  	
  	protected String excutePost(String url, List<NameValuePair> nvps) throws Exception {
  		HttpClient httpClient = getHttpClient();
  		HttpPost httpPost = new HttpPost(url);
  		httpPost.setEntity(new UrlEncodedFormEntity(nvps));
  		HttpResponse httpResponse = httpClient.execute(httpPost);
  		String response = parseResponse(url, httpResponse);
  		return response;
  	}
  
  	private String parseResponse(String url, HttpResponse httpResponse)
  			throws Exception, IOException {
  		int status = httpResponse.getStatusLine().getStatusCode();
  		if(status != 200){
  			String errorMsg = "Error occurs in calling acl service: " + url + ", with status:" + status;
  			throw new Exception(errorMsg);
  		}
  		HttpEntity entry = httpResponse.getEntity();
  		String response = EntityUtils.toString(entry, "UTF-8");
  		return response;
  	}
  
  	private HttpClient getHttpClient() {
  		HttpClient httpClient = new DefaultHttpClient();
  		httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
  		httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
  		return httpClient;
  	}
  
  	private HttpUriRequest getGetRequest(String url, boolean useURI) throws Exception {
  		HttpUriRequest request;
  		if(useURI){
  			URL requestURL = new URL(url);
  			URI uri = new URI(
  				requestURL.getProtocol(),
  				null,
  				requestURL.getHost(), 
  				requestURL.getPort(),
  				requestURL.getPath(), 
  				requestURL.getQuery(), 
  				null);
  			request = new HttpGet(uri);
  		}
  		else{
  				request = new HttpGet(url);
  		}
  		return request;
  	}
  	
  //	protected boolean parseResultMap(String response, String url) throws Exception{
  //		Map<?, ?> result = jsonUtil.formatJSON2Map(response);
  //		if(result == null){
  //			return false;
  //		}
  //		String code = (String)result.get("statusCode");
  //		if("-1".equals(code)){
  //            throw new Exception(String.valueOf(result.get("errorMsg")));
  //		}
  //		return true;
  //	}
  	
  
  	public void get(String url) throws Exception{
  		String response = excuteGet(url, false);
  		if(response == null){
  			LOGGER.error("call uri error, response is null, uri = " + url);
  		}
  		//parseResultMap(response, url);
  	}
  	
  	public void getByURI(String url) throws Exception{
  		String response = excuteGet(url, true);
  		if(response == null){
  			LOGGER.error("call uri error, response is null, uri = " + url);
  		}
          //parseResultMap(response, url);
  	}
  }
  