mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-17 00:36:02 +10:00
[유치수] [NOBTS] 불필요한 코드 제거.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-web/trunk@2723 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -1,13 +1,9 @@
|
||||
package com.nhn.pinpoint.web.controller;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.nhn.pinpoint.common.util.DateUtils;
|
||||
import com.nhn.pinpoint.web.filter.FilterBuilder;
|
||||
import com.nhn.pinpoint.web.vo.LimitedScanResult;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -18,11 +14,14 @@ import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import com.nhn.pinpoint.common.ServiceType;
|
||||
import com.nhn.pinpoint.common.util.DateUtils;
|
||||
import com.nhn.pinpoint.web.applicationmap.ApplicationMap;
|
||||
import com.nhn.pinpoint.web.filter.Filter;
|
||||
import com.nhn.pinpoint.web.filter.FilterBuilder;
|
||||
import com.nhn.pinpoint.web.service.ApplicationMapService;
|
||||
import com.nhn.pinpoint.web.service.FlowChartService;
|
||||
import com.nhn.pinpoint.web.util.TimeUtils;
|
||||
import com.nhn.pinpoint.web.vo.LimitedScanResult;
|
||||
import com.nhn.pinpoint.web.vo.LinkStatistics;
|
||||
import com.nhn.pinpoint.web.vo.TransactionId;
|
||||
|
||||
@@ -94,27 +93,6 @@ public class ApplicationMapController {
|
||||
return getServerMapData(model, response, applicationName, serviceType, from, to);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/filtermap", method = RequestMethod.GET)
|
||||
public String filtermap(Model model,
|
||||
HttpServletResponse response,
|
||||
@RequestParam("application") String applicationName,
|
||||
@RequestParam("serviceType") short serviceType,
|
||||
@RequestParam("from") long from,
|
||||
@RequestParam("to") long to,
|
||||
@RequestParam(value = "filter", required = false) String filterText) {
|
||||
|
||||
model.addAttribute("applicationName", applicationName);
|
||||
model.addAttribute("serviceType", serviceType);
|
||||
model.addAttribute("from", from);
|
||||
model.addAttribute("to", to);
|
||||
model.addAttribute("fromDate", new Date(from));
|
||||
model.addAttribute("toDate", new Date(to));
|
||||
model.addAttribute("filterText", filterText);
|
||||
model.addAttribute("filter", filterBuilder.build(filterText));
|
||||
|
||||
return "applicationmap.filtered.view";
|
||||
}
|
||||
|
||||
/**
|
||||
* 필터가 적용된 서버맵의 FROM ~ TO기간의 데이터 조회
|
||||
*
|
||||
@@ -153,9 +131,11 @@ public class ApplicationMapController {
|
||||
|
||||
model.addAttribute("nodes", map.getNodes());
|
||||
model.addAttribute("links", map.getLinks());
|
||||
// model.addAttribute("timeseriesResponses", map.getTimeseriesResponses());
|
||||
|
||||
// FIXME linkstatistics detail에 보여주는 timeseries값을 서버맵에서 제공할 예정.
|
||||
// model.addAttribute("timeseriesResponses", map.getTimeseriesResponses());
|
||||
|
||||
return "applicationmap.filtered2";
|
||||
return "applicationmap.filtered";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,8 +6,6 @@ import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.nhn.pinpoint.web.filter.FilterBuilder;
|
||||
import com.nhn.pinpoint.web.service.SpanResult;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -19,11 +17,12 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.nhn.pinpoint.web.applicationmap.ApplicationMap;
|
||||
import com.nhn.pinpoint.web.calltree.server.ServerCallTree;
|
||||
import com.nhn.pinpoint.web.calltree.span.SpanAlign;
|
||||
import com.nhn.pinpoint.web.filter.Filter;
|
||||
import com.nhn.pinpoint.web.filter.FilterBuilder;
|
||||
import com.nhn.pinpoint.web.service.FlowChartService;
|
||||
import com.nhn.pinpoint.web.service.RecordSetService;
|
||||
import com.nhn.pinpoint.web.service.SpanResult;
|
||||
import com.nhn.pinpoint.web.service.SpanService;
|
||||
import com.nhn.pinpoint.web.util.TimeUtils;
|
||||
import com.nhn.pinpoint.web.vo.BusinessTransactions;
|
||||
@@ -171,8 +170,6 @@ public class BusinessTransactionController {
|
||||
mv.setViewName("transactionInfoJson");
|
||||
}
|
||||
}
|
||||
|
||||
return mv;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.nhn.pinpoint.web.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.SortedMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -13,12 +11,8 @@ import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import com.nhn.pinpoint.common.bo.AgentInfoBo;
|
||||
import com.nhn.pinpoint.web.service.FlowChartService;
|
||||
import com.nhn.pinpoint.web.service.MonitorService;
|
||||
import com.nhn.pinpoint.web.vo.AgentStatus;
|
||||
import com.nhn.pinpoint.web.vo.Application;
|
||||
|
||||
/**
|
||||
@@ -33,9 +27,6 @@ public class MainController {
|
||||
@Autowired
|
||||
private FlowChartService flow;
|
||||
|
||||
@Autowired
|
||||
private MonitorService monitor;
|
||||
|
||||
@RequestMapping(value = "/applications", method = RequestMethod.GET)
|
||||
public String flow(Model model, HttpServletResponse response) {
|
||||
List<Application> applications = flow.selectAllApplicationNames();
|
||||
@@ -46,20 +37,6 @@ public class MainController {
|
||||
return "applications";
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/agentStatus", method = RequestMethod.GET)
|
||||
public String agentStatus(Model model, HttpServletResponse response, @RequestParam("agentId") List<String> agentIdList) {
|
||||
SortedMap<String, AgentStatus> statusMap = new TreeMap<String, AgentStatus>();
|
||||
|
||||
for (String agentId : agentIdList) {
|
||||
AgentInfoBo agentInfo = monitor.getAgentInfo(agentId);
|
||||
statusMap.put(agentId, new AgentStatus(agentInfo));
|
||||
}
|
||||
|
||||
model.addAttribute("statusMap", statusMap);
|
||||
|
||||
return "agentstatus";
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/serverTime", method = RequestMethod.GET)
|
||||
public String getServerTime(Model model, HttpServletResponse response) {
|
||||
model.addAttribute("currentServerTime", System.currentTimeMillis());
|
||||
|
||||
@@ -47,15 +47,15 @@ public class ScatterChartController {
|
||||
@Autowired
|
||||
private FilterBuilder filterBuilder;
|
||||
|
||||
@RequestMapping(value = "/selectedScatter", method = RequestMethod.GET)
|
||||
public String selectedScatter(Model model, HttpServletResponse response) {
|
||||
return "selectedScatter";
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/selectedScatterList", method = RequestMethod.GET)
|
||||
public String selectedScatterList(Model model, HttpServletResponse response) {
|
||||
return "selectedScatterList";
|
||||
}
|
||||
// @RequestMapping(value = "/selectedScatter", method = RequestMethod.GET)
|
||||
// public String selectedScatter(Model model, HttpServletResponse response) {
|
||||
// return "selectedScatter";
|
||||
// }
|
||||
//
|
||||
// @RequestMapping(value = "/selectedScatterList", method = RequestMethod.GET)
|
||||
// public String selectedScatterList(Model model, HttpServletResponse response) {
|
||||
// return "selectedScatterList";
|
||||
// }
|
||||
|
||||
@RequestMapping(value = "/scatterpopup", method = RequestMethod.GET)
|
||||
public String scatterPopup(Model model, HttpServletResponse response, @RequestParam("application") String applicationName, @RequestParam("from") long from, @RequestParam("to") long to, @RequestParam("period") long period, @RequestParam("usePeriod") boolean usePeriod, @RequestParam(value = "filter", required = false) String filterText) {
|
||||
@@ -164,43 +164,43 @@ public class ScatterChartController {
|
||||
return getScatterData(model, response, applicationName, from, to, limit, filterText, jsonpCallback, version);
|
||||
}
|
||||
|
||||
/**
|
||||
* scatter 실시간 갱신에서는 to 시간을 지정하지 않는다. server time을 사용하고 조회된 시간 범위를 반환해준다.
|
||||
* UI에서는 반환된 조회 범위를 참조해서 다음 쿼리를 요청한다.
|
||||
*
|
||||
* @param model
|
||||
* @param response
|
||||
* @param applicationName
|
||||
* @param from
|
||||
* @param limit
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/getRealtimeScatterData", method = RequestMethod.GET)
|
||||
public String getRealtimeScatterData(Model model, HttpServletResponse response, @RequestParam("application") String applicationName, @RequestParam("from") long from, @RequestParam("limit") int limit) {
|
||||
StopWatch watch = new StopWatch();
|
||||
watch.start("selectScatterData");
|
||||
|
||||
long to = TimeUtils.getDelayLastTime();
|
||||
|
||||
// TODO need filter??
|
||||
List<Dot> scatterData = scatter.selectScatterData(applicationName, from, to, limit);
|
||||
watch.stop();
|
||||
|
||||
logger.info("Fetch scatterData time : {}ms", watch.getLastTaskTimeMillis());
|
||||
|
||||
model.addAttribute("scatter", scatterData);
|
||||
model.addAttribute("queryFrom", from);
|
||||
|
||||
if (scatterData.size() >= limit) {
|
||||
model.addAttribute("queryTo", scatterData.get(scatterData.size() - 1).getTimestamp());
|
||||
} else {
|
||||
model.addAttribute("queryTo", to);
|
||||
}
|
||||
|
||||
model.addAttribute("limit", limit);
|
||||
|
||||
return "scatterRealtime";
|
||||
}
|
||||
// /**
|
||||
// * scatter 실시간 갱신에서는 to 시간을 지정하지 않는다. server time을 사용하고 조회된 시간 범위를 반환해준다.
|
||||
// * UI에서는 반환된 조회 범위를 참조해서 다음 쿼리를 요청한다.
|
||||
// *
|
||||
// * @param model
|
||||
// * @param response
|
||||
// * @param applicationName
|
||||
// * @param from
|
||||
// * @param limit
|
||||
// * @return
|
||||
// */
|
||||
// @RequestMapping(value = "/getRealtimeScatterData", method = RequestMethod.GET)
|
||||
// public String getRealtimeScatterData(Model model, HttpServletResponse response, @RequestParam("application") String applicationName, @RequestParam("from") long from, @RequestParam("limit") int limit) {
|
||||
// StopWatch watch = new StopWatch();
|
||||
// watch.start("selectScatterData");
|
||||
//
|
||||
// long to = TimeUtils.getDelayLastTime();
|
||||
//
|
||||
// // TODO need filter??
|
||||
// List<Dot> scatterData = scatter.selectScatterData(applicationName, from, to, limit);
|
||||
// watch.stop();
|
||||
//
|
||||
// logger.info("Fetch scatterData time : {}ms", watch.getLastTaskTimeMillis());
|
||||
//
|
||||
// model.addAttribute("scatter", scatterData);
|
||||
// model.addAttribute("queryFrom", from);
|
||||
//
|
||||
// if (scatterData.size() >= limit) {
|
||||
// model.addAttribute("queryTo", scatterData.get(scatterData.size() - 1).getTimestamp());
|
||||
// } else {
|
||||
// model.addAttribute("queryTo", to);
|
||||
// }
|
||||
//
|
||||
// model.addAttribute("limit", limit);
|
||||
//
|
||||
// return "scatterRealtime";
|
||||
// }
|
||||
|
||||
/**
|
||||
* scatter에서 점 여러개를 선택했을 때 점에 대한 정보를 조회한다.
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.nhn.pinpoint.web.service;
|
||||
|
||||
import com.nhn.pinpoint.common.bo.AgentInfoBo;
|
||||
|
||||
/**
|
||||
* @author netspider
|
||||
*/
|
||||
public interface MonitorService {
|
||||
public AgentInfoBo getAgentInfo(String agentId);
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
package com.nhn.pinpoint.web.service;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.nhn.pinpoint.web.dao.AgentInfoDao;
|
||||
import com.nhn.pinpoint.common.bo.AgentInfoBo;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author netspider
|
||||
*/
|
||||
@Service
|
||||
public class MonitorServiceImpl implements MonitorService {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
@Autowired
|
||||
private AgentInfoDao agentInfoDao;
|
||||
|
||||
public AgentInfoBo getAgentInfo(String agentId) {
|
||||
AgentInfoBo agentInfo = agentInfoDao.findAgentInfoBeforeStartTime(agentId, System.currentTimeMillis());
|
||||
logger.debug("Found agentInfo agentId={}, agentInfo={}", agentId, agentInfo);
|
||||
return agentInfo;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
{
|
||||
<c:forEach items="${statusMap}" var="agentStatus" varStatus="status">
|
||||
"${agentStatus.key}" : [ ${agentStatus.value.exists},
|
||||
<c:choose>
|
||||
<c:when test="${agentStatus.value.exists}">
|
||||
${agentStatus.value.checkTime - agentStatus.value.agentInfo.startTime},
|
||||
${agentStatus.value.agentInfo.startTime}
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
-1, -1
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
]<c:if test="${!status.last}">,</c:if>
|
||||
</c:forEach>
|
||||
}
|
||||
@@ -2,28 +2,52 @@
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
{
|
||||
"lastFetchedTimestamp" : ${lastFetchedTimestamp},
|
||||
"applicationMapData" : {
|
||||
"nodeDataArray": [
|
||||
<c:forEach items="${nodes}" var="node" varStatus="status">
|
||||
{
|
||||
"id" : ${status.count},
|
||||
"key" : ${status.count},
|
||||
"text" : "${node}",
|
||||
"hosts" : [
|
||||
<c:forEach items="${node.hosts}" var="host" varStatus="status2">
|
||||
"${host}"
|
||||
<c:if test="${!status2.last}">,</c:if>
|
||||
</c:forEach>
|
||||
],
|
||||
"category" : "${node.serviceType.desc}",
|
||||
"serviceTypeCode" : "${node.serviceType.code}",
|
||||
"terminal" : "${node.serviceType.terminal}",
|
||||
"agents" : [],
|
||||
<c:choose>
|
||||
<c:when test="${node.applicationName == 'CLIENT'}">
|
||||
"text" : "USER",
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
"text" : "${node.applicationName}",
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<c:choose>
|
||||
<c:when test="${node.serviceType.desc == 'CLIENT'}">
|
||||
"category" : "USER",
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
"category" : "${node.serviceType.desc}",
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<c:choose>
|
||||
<c:when test="${node.serviceType.desc == 'CLIENT'}">"fig" : "Ellipse"</c:when>
|
||||
<c:when test="${node.serviceType.desc == 'TOMCAT'}">"fig" : "RoundedRectangle"</c:when>
|
||||
<c:otherwise>"fig" : "Rectangle"</c:otherwise>
|
||||
</c:choose>
|
||||
</c:choose>,
|
||||
"serviceTypeCode" : "${node.serviceType.code}",
|
||||
"terminal" : "${node.serviceType.terminal}",
|
||||
"isWas" : ${node.serviceType.was},
|
||||
"serverList" : {
|
||||
<c:forEach items="${node.serverInstanceList}" var="serverInstance" varStatus="status5">
|
||||
"${serverInstance.key}" : {
|
||||
"name" : "${serverInstance.key}",
|
||||
"status" : null,
|
||||
"instanceList" : {
|
||||
<c:forEach items="${serverInstance.value}" var="instance" varStatus="status6">
|
||||
"${instance.key}" : ${instance.value.json}
|
||||
<c:if test="${!status6.last}">,</c:if>
|
||||
</c:forEach>
|
||||
}
|
||||
}
|
||||
<c:if test="${!status5.last}">,</c:if>
|
||||
</c:forEach>
|
||||
}
|
||||
} <c:if test="${!status.last}">,</c:if>
|
||||
</c:forEach>
|
||||
],
|
||||
@@ -38,7 +62,14 @@
|
||||
"text" : ${link.histogram.totalCount},
|
||||
"error" : ${link.histogram.errorCount},
|
||||
"slow" : ${link.histogram.slowCount},
|
||||
"histogram" : ${link.histogram},
|
||||
"histogram" : ${link.histogram.json},
|
||||
"targetHosts" : {
|
||||
<c:forEach items="${link.hostList}" var="host" varStatus="status2">
|
||||
"${host.value.host}" : {
|
||||
"histogram" : ${host.value.histogram.json}
|
||||
}<c:if test="${!status2.last}">,</c:if>
|
||||
</c:forEach>
|
||||
},
|
||||
<c:choose>
|
||||
<c:when test="${(link.histogram.errorCount / link.histogram.totalCount * 100) > 10}">"category" : "bad"</c:when>
|
||||
<c:otherwise>"category" : "default"</c:otherwise>
|
||||
|
||||
@@ -1,189 +0,0 @@
|
||||
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="pinpoint" uri="http://pinpoint.nhncorp.com/pinpoint" %>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>PINPOINT</title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap/css/bootstrap.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap/css/bootstrap-responsive.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/pinpoint/css/pinpoint.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/pinpoint-scatter/css/scatter.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap-datepicker/bootstrap-datepicker.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/nvd3/nv.d3.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/select2/select2.css" />
|
||||
|
||||
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- commons -->
|
||||
<script type="text/javascript" src="/components_v1/jquery/jquery-1.9.1.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-ui/jquery-ui-1.10.2.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-class/jquery.Class.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-template/jquery.tmpl.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/bootstrap-datepicker/bootstrap-datepicker.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/modernizer/modernizr-2.6.2.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/underscore/underscore-min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/select2/select2.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/utils/date.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/pinpoint.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/navigationbar.js"></script>
|
||||
|
||||
<!-- scatter chart -->
|
||||
<script type="text/javascript" src="/components_v1/jquery-dragtoselect/jquery.dragToSelect.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-scatter/jquery.BigScatterChart.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-scatter4.js"></script>
|
||||
|
||||
<!-- server map -->
|
||||
<script type="text/javascript" src="/components_v1/gojs/go.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/Point2D.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/intersection.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/canvas.roundRect.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/jquery.ServerMap.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-servermap.js"></script>
|
||||
|
||||
<!-- link info chart -->
|
||||
<script type="text/javascript" src="/components_v1/d3/d3.v2.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/nvd3/nv.d3.js"></script>
|
||||
|
||||
<!-- requests list -->
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-transactions.js"></script>
|
||||
|
||||
<!-- help -->
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/message.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<img class="brand" src="/images/logo.png" width="116" height="18" />
|
||||
<div class="nav-collapse collapse">
|
||||
<ul class="nav">
|
||||
<li class="">
|
||||
<p class="navbar-text">Filtered Map</p>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<p class="navbar-text">${applicationName}</p>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<p class="navbar-text">
|
||||
<fmt:formatDate value="${fromDate}" pattern="yyyy/MM/dd HH:mm:ss"/> ~ <fmt:formatDate value="${toDate}" pattern="yyyy/MM/dd HH:mm:ss"/>
|
||||
</p>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<p class="navbar-text">
|
||||
${filter}
|
||||
</p>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
options
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" id="mergeUnknown" data-selected="true"><i class="icon-ok"></i> Merge unknowns</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container" id="warningMessage"></div>
|
||||
|
||||
<!-- BODY -->
|
||||
<div class="chart-container">
|
||||
<div class="chart-left">
|
||||
<div class="container">
|
||||
<!--
|
||||
<div class="alert alert-info">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
Filter : ${filterText}
|
||||
</div>
|
||||
-->
|
||||
<div id="progressbar"><img src="/images/ajaxloader.gif" /></div>
|
||||
</div>
|
||||
<div id="servermap" class="servermap"></div>
|
||||
</div>
|
||||
<div class="chart-right">
|
||||
<div id="scatterChartContainer" style="display:none;">
|
||||
<span onclick="" style="text-decoration:underline;cursor:pointer">Show all transactions</span>
|
||||
|
||||
<i class="icon-fullscreen" onclick="expandScatter($(this));" onmouseover="$(this).tooltip('show');" title="Expand to new popup window." style="cursor:pointer;"></i>
|
||||
|
||||
<a href=""><i class="icon-download-alt" onmouseover="$(this).tooltip('show');" title="Download as PNG image format file." style="cursor:pointer;"></i></a>
|
||||
<div id="scatterchart"></div>
|
||||
</div>
|
||||
<div id="statisticsProgressbar" style="display:none;"><img src="/images/ajaxloader.gif" /></div>
|
||||
<div id="nodeInfoDetails">
|
||||
<div class='info'></div>
|
||||
</div>
|
||||
<div id="linkInfoDetails">
|
||||
<div class='info'></div>
|
||||
<div class='linkInfoChart' style='width:100%;display:none'>
|
||||
Response histogram (UNDERCONSTRUCTION)
|
||||
<svg style='height:200px' />
|
||||
</div>
|
||||
<div class='linkInfoBarChart' style='width:100%;display:none'>
|
||||
Response histogram summary
|
||||
<svg style='height:150px' />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END OF BODY -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$("#mergeUnknown").bind('click', toggleMergeUnknowns);
|
||||
|
||||
showServerMap("${applicationName}", "${serviceType}", ${from}, ${to}, 0, false, "${filterText}", false, function() {
|
||||
$("#progressbar").hide();
|
||||
});
|
||||
|
||||
showResponseScatter("${applicationName}", ${from}, ${to}, 0, false, "${filterText}");
|
||||
});
|
||||
</script>
|
||||
<script id="NodeInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="NodeInfoBox">NodeInfoBox
|
||||
</div>
|
||||
</script>
|
||||
<script id="LinkInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="LinkInfoBox">LinkInfoBox
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script id="UnknownNodeInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="UnknownNodeInfoBox">UnknownNodeInfoBox
|
||||
|
||||
</div>
|
||||
</script>
|
||||
<script id="UnknownLinkInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="UnknownLinkInfoBox">UnknownLinkInfoBox
|
||||
|
||||
</div>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,81 +0,0 @@
|
||||
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
{
|
||||
"lastFetchedTimestamp" : ${lastFetchedTimestamp},
|
||||
"applicationMapData" : {
|
||||
"nodeDataArray": [
|
||||
<c:forEach items="${nodes}" var="node" varStatus="status">
|
||||
{
|
||||
"id" : ${status.count},
|
||||
"key" : ${status.count},
|
||||
<c:choose>
|
||||
<c:when test="${node.applicationName == 'CLIENT'}">
|
||||
"text" : "USER",
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
"text" : "${node.applicationName}",
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<c:choose>
|
||||
<c:when test="${node.serviceType.desc == 'CLIENT'}">
|
||||
"category" : "USER",
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
"category" : "${node.serviceType.desc}",
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<c:choose>
|
||||
<c:when test="${node.serviceType.desc == 'CLIENT'}">"fig" : "Ellipse"</c:when>
|
||||
<c:when test="${node.serviceType.desc == 'TOMCAT'}">"fig" : "RoundedRectangle"</c:when>
|
||||
<c:otherwise>"fig" : "Rectangle"</c:otherwise>
|
||||
</c:choose>,
|
||||
"serviceTypeCode" : "${node.serviceType.code}",
|
||||
"terminal" : "${node.serviceType.terminal}",
|
||||
"isWas" : ${node.serviceType.was},
|
||||
"serverList" : {
|
||||
<c:forEach items="${node.serverInstanceList}" var="serverInstance" varStatus="status5">
|
||||
"${serverInstance.key}" : {
|
||||
"name" : "${serverInstance.key}",
|
||||
"status" : null,
|
||||
"instanceList" : {
|
||||
<c:forEach items="${serverInstance.value}" var="instance" varStatus="status6">
|
||||
"${instance.key}" : ${instance.value.json}
|
||||
<c:if test="${!status6.last}">,</c:if>
|
||||
</c:forEach>
|
||||
}
|
||||
}
|
||||
<c:if test="${!status5.last}">,</c:if>
|
||||
</c:forEach>
|
||||
}
|
||||
} <c:if test="${!status.last}">,</c:if>
|
||||
</c:forEach>
|
||||
],
|
||||
"linkDataArray": [
|
||||
<c:forEach items="${links}" var="link" varStatus="status">
|
||||
{
|
||||
"id" : "${link.from.sequence + 1}-${link.to.sequence + 1}",
|
||||
"from" : ${link.from.sequence + 1},
|
||||
"to" : ${link.to.sequence + 1},
|
||||
"sourceinfo" : ${link.from.json},
|
||||
"targetinfo" : ${link.to.json},
|
||||
"text" : ${link.histogram.totalCount},
|
||||
"error" : ${link.histogram.errorCount},
|
||||
"slow" : ${link.histogram.slowCount},
|
||||
"histogram" : ${link.histogram.json},
|
||||
"targetHosts" : {
|
||||
<c:forEach items="${link.hostList}" var="host" varStatus="status2">
|
||||
"${host.value.host}" : {
|
||||
"histogram" : ${host.value.histogram.json}
|
||||
}<c:if test="${!status2.last}">,</c:if>
|
||||
</c:forEach>
|
||||
},
|
||||
<c:choose>
|
||||
<c:when test="${(link.histogram.errorCount / link.histogram.totalCount * 100) > 10}">"category" : "bad"</c:when>
|
||||
<c:otherwise>"category" : "default"</c:otherwise>
|
||||
</c:choose>
|
||||
} <c:if test="${!status.last}">,</c:if>
|
||||
</c:forEach>
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,383 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>PINPOINT</title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap/css/bootstrap.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap/css/bootstrap-responsive.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/pinpoint/css/pinpoint.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/pinpoint-scatter/css/scatter.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/bootstrap-datepicker/bootstrap-datepicker.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/nvd3/nv.d3.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/components_v1/select2/select2.css" />
|
||||
|
||||
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- commons -->
|
||||
<script type="text/javascript" src="/components_v1/jquery/jquery-1.9.1.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-ui/jquery-ui-1.10.2.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-class/jquery.Class.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/jquery-template/jquery.tmpl.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/bootstrap-datepicker/bootstrap-datepicker.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/modernizer/modernizr-2.6.2.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/underscore/underscore-min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/select2/select2.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/utils/date.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/pinpoint.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/navigationbar.js"></script>
|
||||
|
||||
<!-- scatter chart -->
|
||||
<script type="text/javascript" src="/components_v1/jquery-dragtoselect/jquery.dragToSelect.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-scatter/jquery.BigScatterChart.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-scatter4.js"></script>
|
||||
|
||||
<!-- server map -->
|
||||
<script type="text/javascript" src="/components_v1/gojs/go.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/Point2D.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/intersection.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/canvas.roundRect.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint-servermap/jquery.ServerMap.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-servermap.js"></script>
|
||||
|
||||
<!-- link info chart -->
|
||||
<script type="text/javascript" src="/components_v1/d3/d3.v2.min.js"></script>
|
||||
<script type="text/javascript" src="/components_v1/nvd3/nv.d3.js"></script>
|
||||
|
||||
<!-- requests list -->
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/chart-transactions.js"></script>
|
||||
|
||||
<!-- help -->
|
||||
<script type="text/javascript" src="/components_v1/pinpoint/message.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<img class="brand" src="/images/logo.png" width="116" height="18" />
|
||||
<div class="nav-collapse collapse">
|
||||
<ul class="nav">
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<form class="navbar-form pull-left">
|
||||
<select id="application" disabled>
|
||||
<option>Loading...</option>
|
||||
</select>
|
||||
<div id="period" class="btn-group" data-toggle="buttons-radio">
|
||||
<button type="button" value="5" class="btn btn-mini" disabled>Last 5m</button>
|
||||
<button type="button" value="20" class="btn btn-mini btn-inverse active" disabled>20m</button>
|
||||
<button type="button" value="60" class="btn btn-mini" disabled>1h</button>
|
||||
<button type="button" value="180" class="btn btn-mini" disabled>3h</button>
|
||||
<button type="button" value="360" class="btn btn-mini" disabled>6h</button>
|
||||
<button type="button" value="740" class="btn btn-mini" disabled>12h</button>
|
||||
<button type="button" value="1440" class="btn btn-mini" disabled>1d</button>
|
||||
<button type="button" value="2880" class="btn btn-mini" disabled>2d</button>
|
||||
<button type="button" value="4320" class="btn btn-mini" disabled>3d</button>
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="">
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-mini dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
map options
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" id="mergeUnknown" data-selected="true"><i class="icon-ok"></i> Merge unknowns</a></li>
|
||||
<li><a href="#" id="hideIndirectAccess" data-selected="false"><i class="icon-ok icon-white"></i> Hide indirect access</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-submenu">
|
||||
<a tabindex="-1" href="#">Label text type</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" class="labelTextType" data-type="count" data-selected="true"><i class="icon-ok"></i> Total request count</a></li>
|
||||
<li><a href="#" class="labelTextType" data-type="tps" data-selected="false"><i class="icon-ok icon-white"></i> TPS</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
<li class="divider-vertical"></li>
|
||||
<li class="" id="queryTime"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container" id="warningMessage"></div>
|
||||
|
||||
<div class="container">
|
||||
<div id="progressbar" style="display:none;"><img src="/images/ajaxloader.gif" /></div>
|
||||
</div>
|
||||
|
||||
<!-- BODY -->
|
||||
<div class="chart-container">
|
||||
<div class="chart-left">
|
||||
<div id="servermap" class="servermap"></div>
|
||||
</div>
|
||||
<div class="chart-right">
|
||||
<div id="scatterChartContainer" style="display:none;">
|
||||
<span onclick="" style="text-decoration:underline;cursor:pointer">Show all transaction</span>
|
||||
|
||||
<i class="icon-fullscreen" onclick="expandScatter($(this));" onmouseover="$(this).tooltip('show');" title="Expand to new popup window." style="cursor:pointer;"></i>
|
||||
|
||||
<a href=""><i class="icon-download-alt" onmouseover="$(this).tooltip('show');" title="Download as PNG image format file." style="cursor:pointer;"></i></a>
|
||||
<div id="scatterchart"></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div id="statisticsProgressbar" style="display:none;"><img src="/images/ajaxloader.gif" /></div>
|
||||
<div id="nodeInfoDetails">
|
||||
<div class='info'></div>
|
||||
</div>
|
||||
<div id="linkInfoDetails">
|
||||
<div class='info'></div>
|
||||
<div class='linkInfoChart' style='width:100%;display:none'>
|
||||
Response histogram
|
||||
<svg style='height:200px' />
|
||||
</div>
|
||||
<div class='linkInfoBarChart' style='width:100%;display:none'>
|
||||
Response histogram summary
|
||||
<svg style='height:150px' />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END OF BODY -->
|
||||
|
||||
<script type="text/javascript">
|
||||
var Nav;
|
||||
|
||||
$(document).ready(function () {
|
||||
Nav = new _PinpointNavigationBar();
|
||||
|
||||
$("#mergeUnknown").bind('click', toggleMergeUnknowns);
|
||||
$("#hideIndirectAccess").bind('click', toggleHideIndirectAccess);
|
||||
|
||||
$('#date').datepicker().on('changeDate', function(ev){
|
||||
updateCharts();
|
||||
});
|
||||
|
||||
$('#time').bind('focus', function(e){
|
||||
$(this).data("time", $(this).val());
|
||||
}).bind('blur', function(e){
|
||||
if ($(this).data("time") !== $(this).val()) {
|
||||
updateCharts();
|
||||
}
|
||||
});
|
||||
|
||||
$('#until').delegate("button", "click", function(){
|
||||
var $this = $(this);
|
||||
|
||||
$this.siblings(".btn-primary").removeClass("btn-primary");
|
||||
$this.addClass("btn-primary");
|
||||
|
||||
if ($this.attr("id") === "now") {
|
||||
$("#date").attr("disabled", "").val("");
|
||||
$("#time").attr("disabled", "").val("");
|
||||
updateCharts();
|
||||
} else {
|
||||
setQueryDateToNow();
|
||||
$("#date").attr("disabled", null);
|
||||
$("#time").attr("disabled", null);
|
||||
}
|
||||
});
|
||||
|
||||
$('#period').delegate("button", "click", function(){
|
||||
var $this = $(this);
|
||||
$this.siblings(".btn-inverse").removeClass("btn-inverse active");
|
||||
$this.addClass("btn-inverse active");
|
||||
updateCharts();
|
||||
});
|
||||
|
||||
// TODO 조회 버튼을 두 번 연속 눌렀을 때 앞서 수행되던 결과는 취소시켜야 함.
|
||||
// 예를 들어 1일치 조회하다가 모두 조회 되기 전에 30분 데이터 조회할 때...
|
||||
function updateCharts() {
|
||||
if(!Nav.isSelected()) {
|
||||
alert("\n\nSelect an application, please.\n\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
var f = formatDate(new Date(Nav.getQueryStartTime()), true);
|
||||
var e = formatDate(new Date(Nav.getQueryEndTime()), true);
|
||||
|
||||
$("#queryTime").html(f + ' ~ <br/>' + e);
|
||||
|
||||
$("#progressbar").show();
|
||||
|
||||
showServerMap(Nav.getApplicationName(), Nav.getServiceType(), Nav.getQueryStartTime(), Nav.getQueryEndTime(), Nav.getQueryPeriod(), Nav.isQueryFromNow(), null, Nav.isHideIndirectAccess(), function() { $("#progressbar").hide(); });
|
||||
showResponseScatter(Nav.getApplicationName(), Nav.getQueryStartTime(), Nav.getQueryEndTime(), Nav.getQueryPeriod(), Nav.isQueryFromNow());
|
||||
}
|
||||
|
||||
$.getJSON("/applications.pinpoint", function(json) {
|
||||
var target = $("#application");
|
||||
|
||||
if (json.length == 0) {
|
||||
$("#application OPTION:first").text("Application not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
target.empty();
|
||||
var optionsHTML = [];
|
||||
$(json).each(function(i, e) {
|
||||
var opt = $(document.createElement("option"));
|
||||
opt.attr("value", e.applicationName + "@" + e.code);
|
||||
if (json.length == 1) {
|
||||
opt.attr("selected", "selected");
|
||||
}
|
||||
opt.text(e.applicationName + "@" + e.serviceType);
|
||||
target.append(opt);
|
||||
});
|
||||
|
||||
target.attr("disabled", null);
|
||||
|
||||
var formatOptionText = function(state) {
|
||||
if (!state.id) return state.text;
|
||||
var chunk = state.text.split("@");
|
||||
if (chunk.length > 1) {
|
||||
var img = document.createElement("img");
|
||||
img.src = "/images/icons/" + chunk[1] + ".png";
|
||||
return img.outerHTML + chunk[0];
|
||||
} else {
|
||||
return state.text;
|
||||
}
|
||||
}
|
||||
|
||||
target.select2({
|
||||
placeholder: "Select an application.",
|
||||
formatResult: formatOptionText,
|
||||
formatSelection: formatOptionText,
|
||||
escapeMarkup: function(m) { return m; }
|
||||
});
|
||||
|
||||
// 임시.
|
||||
$(".select2-container").css("top", "4px");
|
||||
$("#until BUTTON").attr("disabled", null);
|
||||
$("#period BUTTON").attr("disabled", null);
|
||||
});
|
||||
|
||||
$("#application").bind("change", updateCharts);
|
||||
});
|
||||
</script>
|
||||
<script id="NodeInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="NodeInfoBox">
|
||||
{{if category != "UNKNOWN_GROUP" && category != "USER"}}
|
||||
<img src="/images/icons/{{= category}}.png" width="20" height="10" /> {{= text}} ({{= category}})
|
||||
{{if terminal == "false" && category != "UNKNOWN_CLOUD"}}
|
||||
<br/><a href="#" onclick="showRequests('{{= text}}', {{= query.from}}, {{= query.to}}, {{= query.period}}, {{= query.usePeriod}});">Passing transaction list</a>
|
||||
<br/><a href="#" onclick="showResponseScatter('{{= text}}', {{= query.from}}, {{= query.to}}, {{= query.period}}, {{= query.usePeriod}});">Passing transaction response scatter chart</a>
|
||||
{{/if}}
|
||||
<br/>
|
||||
{{/if}}
|
||||
|
||||
{{if category == "USER"}}
|
||||
<img src="/images/icons/USER.png" width="20" height="10" /> {{= category}}
|
||||
{{/if}}
|
||||
|
||||
{{if hosts.length > 0}}
|
||||
Hosts
|
||||
<ul>
|
||||
{{each(key, value) hosts}}
|
||||
<li>
|
||||
<span class="label label-success">OK</span>
|
||||
{{= value.name}}
|
||||
<a href="http://nsight.nhncorp.com/dashboard_server/{{= value.name.split(':')[0].replace('.nhnsystem.com','')}}" target="_blank" title="System resource monitoring site">(NSight)</a>
|
||||
{{if category == 'ARCUS' }}
|
||||
<a href="http://hubble.arcuscloud.nhncorp.com/" target="_blank" title="Arcus monitoring site">(Hubble)</a>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
{{if agents.length > 0}}
|
||||
Server instances
|
||||
<ul>
|
||||
{{each(key, value) agents}}
|
||||
<li>
|
||||
<span class="label label-success">OK</span>
|
||||
{{= value.agentId}}
|
||||
<!--
|
||||
<a href="#" onclick="alert('Sorry. Not implemented.');">(Kuvasz)</a>
|
||||
<a href="#" onclick="alert('Sorry. Not implemented.');">(Tools)</a>
|
||||
-->
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
</div>
|
||||
</script>
|
||||
<script id="LinkInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="LinkInfoBox">
|
||||
<img src="/images/icons/{{= sourceinfo.serviceType}}.png" width="20" height="10" /> {{= sourceinfo.applicationName}}
|
||||
<i class="icon-arrow-right"></i>
|
||||
<img src="/images/icons/{{= targetinfo.serviceType}}.png" width="20" height="10" /> {{= targetinfo.applicationName}}
|
||||
<!--
|
||||
<br/>
|
||||
Total requests : ???<br/>
|
||||
Failed : {{= error}}<br/>
|
||||
Response statistics
|
||||
<ul>
|
||||
{{var lastKey=''}}
|
||||
{{each(key, value) histogram}}
|
||||
<li><= {{= key}}ms : {{= value}}</li>
|
||||
{{eval lastKey=key}}
|
||||
{{/each}}
|
||||
<li> > {{= lastKey}}ms : {{= slow}}</li>
|
||||
</ul>
|
||||
-->
|
||||
<br/>
|
||||
<a href="#" onclick="filterPassingTransaction('{{= sourceinfo.applicationName}}', '{{= query.serviceType}}', {{= query.from}}, {{= query.to}}, '{{= sourceinfo.serviceType}}', '{{= sourceinfo.applicationName}}', '{{= targetinfo.serviceType}}', '{{= targetinfo.applicationName}}', null);">Passing transaction map</a><br/>
|
||||
{{if sourceinfo.serviceType == "CLIENT"}}
|
||||
<a href="#" onclick="showRequests('{{= targetinfo.applicationName}}', {{= query.from}}, {{= query.to}}, {{= query.period}}, {{= query.usePeriod}}, '{{= sourceinfo.serviceType}}|{{= targetinfo.applicationName}}|{{= targetinfo.serviceType}}|{{= targetinfo.applicationName}}');">Passing transaction list</a>
|
||||
{{/if}}
|
||||
{{if sourceinfo.serviceType != "CLIENT"}}
|
||||
<a href="#" onclick="showRequests('{{= sourceinfo.applicationName}}', {{= query.from}}, {{= query.to}}, {{= query.period}}, {{= query.usePeriod}}, '{{= sourceinfo.serviceType}}|{{= sourceinfo.applicationName}}|{{= targetinfo.serviceType}}|{{= targetinfo.applicationName}}');">Passing transaction list</a>
|
||||
{{/if}}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script id="UnknownNodeInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="UnknownNodeInfoBox">
|
||||
{{each(index, value) textArr}}
|
||||
<img src="/images/icons/UNKNOWN_CLOUD.png" width="20" height="10" /> {{= value.applicationName}}<br/>
|
||||
{{/each}}
|
||||
</div>
|
||||
</script>
|
||||
<script id="UnknownLinkInfoBox" type="text/x-jquery-tmpl">
|
||||
<div class="UnknownLinkInfoBox">
|
||||
{{each(index, value) targetinfo}}
|
||||
<img src="/images/icons/{{= sourceinfo[0].serviceType}}.png" width="20" height="10" /> {{= sourceinfo[0].applicationName}}
|
||||
<i class="icon-arrow-right"></i>
|
||||
<img src="/images/icons/{{= value.serviceType}}.png" width="20" height="10" /> {{= value.applicationName}}
|
||||
<a href="#" onclick="SERVERMAP_METHOD_CACHE['{{= value.applicationName}}']();" title="show details" style="text-decoration:none;">
|
||||
<i class="icon-search"></i>
|
||||
</a>
|
||||
<ul>
|
||||
<li>request count : {{= rawdata[value.applicationName].count}} /
|
||||
{{if rawdata[value.applicationName].error > 0}}
|
||||
<font color="#FF0000">{{= rawdata[value.applicationName].error}}</font>
|
||||
{{else}}
|
||||
{{= rawdata[value.applicationName].error}}
|
||||
{{/if}}
|
||||
</li>
|
||||
</ul>
|
||||
<br/>
|
||||
{{/each}}
|
||||
</div>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user