package com.navercorp.pinpoint.testapp.controller;
import java.net.InetAddress;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.http.client.utils.URIBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.navercorp.pinpoint.testapp.service.remote.RemoteService;
import com.navercorp.pinpoint.testapp.util.Description;
@Controller
@RequestMapping("/callSelf")
public class CallSelfController {
private static final String GET_CURRENT_TIMESTAMP_PATH = "/getCurrentTimestamp";
private static final String GET_GEO_CODE_PATH = "/httpclient4/getGeoCode";
private static final String GET_TWITTER_URL_COUNT_PATH = "/httpclient4/getTwitterUrlCount";
private static final String DEFAULT_LOCAL_IP = "127.0.0.1";
private static final String LOCAL_IP = getLocalHostIp();
private static String getLocalHostIp() {
try {
final InetAddress localHost = InetAddress.getLocalHost();
return localHost.getHostAddress();
} catch (UnknownHostException e) {
}
return DEFAULT_LOCAL_IP;
}
@Autowired
@Qualifier("httpRemoteService")
RemoteService remoteService;
@RequestMapping("/getCurrentTimestamp")
@ResponseBody
@Description("Calls self for " + GET_CURRENT_TIMESTAMP_PATH + " over HTTP.")
public Map<String, Object> getCurrentTimeStamp(HttpServletRequest request) throws Exception {
String url = createTargetUrl(request, GET_CURRENT_TIMESTAMP_PATH);
@SuppressWarnings("unchecked")
Map<String, Object> response = remoteService.get(url, Map.class);
return response;
}
@RequestMapping("/httpclient4/getGeoCode")
@ResponseBody
@Description("Calls self for " + GET_GEO_CODE_PATH + " over HTTP.")
public Map<String, Object> httpClient4GetGeoCode(HttpServletRequest request) throws Exception {
String url = createTargetUrl(request, GET_GEO_CODE_PATH);
@SuppressWarnings("unchecked")
Map<String, Object> response = remoteService.get(url, Map.class);
return response;
}
@RequestMapping("/httpclient4/getTwitterUrlCount")
@ResponseBody
@Description("Calls self for " + GET_TWITTER_URL_COUNT_PATH + " over HTTP.")
public Map<String, Object> httpClient4GetTwitterUrlCount(HttpServletRequest request) throws Exception {
String url = createTargetUrl(request, GET_TWITTER_URL_COUNT_PATH);
@SuppressWarnings("unchecked")
Map<String, Object> response = remoteService.get(url, Map.class);
return response;
}
private static final String createTargetUrl(final HttpServletRequest request, final String path) throws URISyntaxException {
return new URIBuilder()
.setScheme("http")
.setHost(LOCAL_IP)
.setPort(request.getLocalPort())
.setPath(path + ".pinpoint")
.build()
.toString();
}
}