From 22c99012d9a62316f84b30d1dea23a6d539a091b Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 11 Apr 2016 15:08:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=B0=86=E9=A1=B5=E9=9D=A2=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=94=B9=E6=88=90ajax=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/MainPageController.java | 20 + .../web/controller/SearchController.java | 42 +- .../controller/UserMaintainController.java | 15 + .../web/dao/impl/CallChainTreeDao.java | 43 ++ .../web/dao/impl/ChainDetailDao.java | 49 +++ .../skywalking/web/dao/impl/TraceNodeDao.java | 1 + .../web/dao/inter/ICallChainTreeDao.java | 12 + .../web/dao/inter/IChainDetailDao.java | 11 + .../skywalking/web/entity/CallChainTree.java | 27 ++ .../web/entity/CallChainTreeNode.java | 15 + .../web/filter/AccessControllerFilter.java | 21 +- .../service/impl/CallChainTreeService.java | 46 ++ .../service/inter/ICallChainTreeService.java | 14 + .../src/main/resources/config.properties | 2 +- .../src/main/resources/jdbc.properties | 6 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- .../skywalking/js/application.js | 402 ++++++++++++++++++ .../pages/anls-result/analysisResult.ftl | 20 +- .../src/main/webapp/pages/common/commons.ftl | 5 +- .../main/webapp/pages/common/traceInfo.ftl | 2 +- .../src/main/webapp/pages/index.ftl | 4 +- .../src/main/webapp/pages/main.ftl | 103 +++++ .../src/main/webapp/pages/searchResult.ftl | 36 -- .../pages/usr/applications/addapplication.ftl | 235 ---------- .../usr/applications/applicationMaintain.ftl | 352 +++++++++++++++ .../usr/applications/applicationsconfig.ftl | 113 ----- .../usr/applications/createglobalconfig.ftl | 133 ------ .../usr/applications/modifyapplication.ftl | 288 ------------- .../main/webapp/pages/usr/authfile/auth.ftl | 55 +++ .../webapp/pages/usr/authfile/download.ftl | 107 ----- 30 files changed, 1247 insertions(+), 934 deletions(-) create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/MainPageController.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/CallChainTreeDao.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/ChainDetailDao.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/ICallChainTreeDao.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/IChainDetailDao.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTree.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTreeNode.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/CallChainTreeService.java create mode 100644 skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/inter/ICallChainTreeService.java create mode 100644 skywalking-webui/src/main/webapp/bower_components/skywalking/js/application.js create mode 100644 skywalking-webui/src/main/webapp/pages/main.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/searchResult.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/usr/applications/addapplication.ftl create mode 100644 skywalking-webui/src/main/webapp/pages/usr/applications/applicationMaintain.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/usr/applications/applicationsconfig.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/usr/applications/createglobalconfig.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/usr/applications/modifyapplication.ftl create mode 100644 skywalking-webui/src/main/webapp/pages/usr/authfile/auth.ftl delete mode 100644 skywalking-webui/src/main/webapp/pages/usr/authfile/download.ftl diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/MainPageController.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/MainPageController.java new file mode 100644 index 000000000..68ff11b1c --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/MainPageController.java @@ -0,0 +1,20 @@ +package com.ai.cloud.skywalking.web.controller; + +import com.ai.cloud.skywalking.web.common.BaseController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by xin on 16-4-10. + */ +@Controller +public class MainPageController extends BaseController{ + + @RequestMapping("/mainPage") + public String mainPage(String loadType, HttpServletRequest request){ + request.setAttribute("loadType", loadType); + return "main"; + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/SearchController.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/SearchController.java index 79f830532..84adbbcc9 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/SearchController.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/SearchController.java @@ -1,11 +1,17 @@ package com.ai.cloud.skywalking.web.controller; +import com.ai.cloud.skywalking.web.bo.LoginUserInfo; import com.ai.cloud.skywalking.web.bo.TraceTreeInfo; import com.ai.cloud.skywalking.web.common.BaseController; +import com.ai.cloud.skywalking.web.entity.CallChainTree; +import com.ai.cloud.skywalking.web.service.inter.ICallChainTreeService; import com.ai.cloud.skywalking.web.service.inter.ITraceTreeService; import com.ai.cloud.skywalking.web.util.StringUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -14,6 +20,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; /** * Created by xin on 16-3-29. @@ -24,6 +32,11 @@ public class SearchController extends BaseController { @Autowired private ITraceTreeService iTraceTreeService; + @Autowired + private ICallChainTreeService callChainTreeService; + private Logger logger = LogManager.getLogger(SearchController.class); + + @RequestMapping(value = "") public String showDefaultIndexPage(ModelMap root) throws Exception { return "index"; @@ -63,9 +76,36 @@ public class SearchController extends BaseController { @RequestMapping(value = "/{traceId:.+}") public String searchTrace(@PathVariable String traceId, HttpServletRequest request) { + System.out.println("search Trace....."); request.setAttribute("key", traceId); request.setAttribute("searchType", "TRACE_ID"); - return "searchResult"; + request.setAttribute("loadType","showTraceInfo"); + return "main"; + } + + @RequestMapping(value = "/search/chainTree", produces = "application/json; charset=UTF-8") + @ResponseBody + public String searchCallChainTree(String key, HttpServletRequest request) { + JSONObject jsonObject = new JSONObject(); + try { + if (StringUtil.isBlank(key)) { + jsonObject.put("code", "200"); + jsonObject.put("result", JSON.toJSONString(new ArrayList())); + return jsonObject.toJSONString(); + } + + LoginUserInfo loginUserInfo = fetchLoginUserInfoFromSession(request); + + List callChainTreeList = + callChainTreeService.queryCurrentMonthCallChainTree(loginUserInfo.getUid(), key); + jsonObject.put("code", "200"); + jsonObject.put("result", new Gson().toJson(callChainTreeList)); + } catch (Exception e) { + logger.error("Failed to search chain tree:{}", key, e); + jsonObject.put("code", "500"); + jsonObject.put("result", "Fatal error"); + } + return jsonObject.toJSONString(); } } diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/UserMaintainController.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/UserMaintainController.java index 573220784..939f66469 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/UserMaintainController.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/controller/UserMaintainController.java @@ -106,4 +106,19 @@ public class UserMaintainController extends BaseController { } return result.toJSONString(); } + + @RequestMapping(value = "/doLogout", produces = "application/json; charset=UTF-8") + @ResponseBody + public String doLogout(HttpServletRequest request) { + JSONObject result = new JSONObject(); + try { + request.getSession().removeAttribute(Constants.SESSION_LOGIN_INFO_KEY); + result.put("code", "200"); + result.put("message", "register success"); + } catch (Exception e) { + result.put("code", "500"); + result.put("message", "fatal error. please try it again."); + } + return result.toJSONString(); + } } diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/CallChainTreeDao.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/CallChainTreeDao.java new file mode 100644 index 000000000..97a157940 --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/CallChainTreeDao.java @@ -0,0 +1,43 @@ +package com.ai.cloud.skywalking.web.dao.impl; + +import com.ai.cloud.skywalking.web.dao.inter.ICallChainTreeDao; +import com.ai.cloud.skywalking.web.entity.CallChainTree; +import com.ai.cloud.skywalking.web.util.HBaseUtils; +import org.apache.hadoop.hbase.Cell; +import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.Get; +import org.apache.hadoop.hbase.client.Result; +import org.apache.hadoop.hbase.client.Table; +import org.apache.hadoop.hbase.util.Bytes; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.io.IOException; + +@Repository +public class CallChainTreeDao implements ICallChainTreeDao { + + @Autowired + private HBaseUtils hBaseUtils; + + @Override + public CallChainTree queryTreeId(String treeId) throws IOException { + Table table = hBaseUtils.getConnection().getTable(TableName.valueOf("sw-chain-1day-summary")); + Get get = new Get(treeId.getBytes()); + Result result = table.get(get); + if (result.rawCells().length == 0) { + return null; + } + CallChainTree chainTree = new CallChainTree(treeId); + for (Cell cell : result.rawCells()) { + if (cell.getValueArray().length > 0) { + String qualifier = Bytes.toString(cell.getQualifierArray(), + cell.getQualifierOffset(), cell.getQualifierLength()); + String[] qualifierArr = qualifier.split("@"); + chainTree.addNode(qualifierArr[0],qualifierArr[1]); + } + + } + return null; + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/ChainDetailDao.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/ChainDetailDao.java new file mode 100644 index 000000000..d5fa7100b --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/ChainDetailDao.java @@ -0,0 +1,49 @@ +package com.ai.cloud.skywalking.web.dao.impl; + +import com.ai.cloud.skywalking.web.dao.inter.IChainDetailDao; +import com.ai.cloud.skywalking.web.util.DBConnectUtil; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +@Repository +public class ChainDetailDao implements IChainDetailDao { + + private Logger logger = LogManager.getLogger(SystemConfigMaintainDao.class); + + @Autowired + private DBConnectUtil dbConnectUtil; + + @Override + public List queryChainTreeIds(String uid, String viewpoint) throws SQLException { + List treeIds = new ArrayList(); + String sql = "SELECT treeId FROM sw_chain_detail WHERE uid = ? AND viewpoint like ? "; + Connection connection = dbConnectUtil.getConnection(); + try { + PreparedStatement preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, uid); + preparedStatement.setString(2, "%" + viewpoint + "%"); + + ResultSet resultSet = preparedStatement.executeQuery(); + while (resultSet.next()) { + treeIds.add(resultSet.getString("treeId")); + } + } catch (Exception e) { + logger.error("Failed to query treeIds for Viewpoint[{}]", viewpoint); + throw new RuntimeException("Failed to query treeIds for " + viewpoint, e); + } finally { + if (connection != null) { + connection.close(); + } + } + return treeIds; + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/TraceNodeDao.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/TraceNodeDao.java index d4bc05cec..f5812694b 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/TraceNodeDao.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/impl/TraceNodeDao.java @@ -79,6 +79,7 @@ public class TraceNodeDao implements ITraceNodeDao { }else{ clientLog.setServerExceptionStr(serverLog.getServerExceptionStr()); } + System.out.println("1"); } logVO.addTimeLine(rpcVO.getValue().getStartDate(), rpcVO.getValue().getCost()); } else { diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/ICallChainTreeDao.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/ICallChainTreeDao.java new file mode 100644 index 000000000..3bac962ae --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/ICallChainTreeDao.java @@ -0,0 +1,12 @@ +package com.ai.cloud.skywalking.web.dao.inter; + +import com.ai.cloud.skywalking.web.entity.CallChainTree; + +import java.io.IOException; + +/** + * Created by xin on 16-4-6. + */ +public interface ICallChainTreeDao { + CallChainTree queryTreeId(String treeId) throws IOException; +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/IChainDetailDao.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/IChainDetailDao.java new file mode 100644 index 000000000..8342ba43b --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/dao/inter/IChainDetailDao.java @@ -0,0 +1,11 @@ +package com.ai.cloud.skywalking.web.dao.inter; + +import java.sql.SQLException; +import java.util.List; + +/** + * Created by xin on 16-4-6. + */ +public interface IChainDetailDao { + List queryChainTreeIds(String uid, String viewpoint) throws SQLException; +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTree.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTree.java new file mode 100644 index 000000000..056cc92d9 --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTree.java @@ -0,0 +1,27 @@ +package com.ai.cloud.skywalking.web.entity; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by xin on 16-4-6. + */ +public class CallChainTree { + private String treeId; + private List nodes; + + private String entranceViewpoint; + + public CallChainTree(String treeId) { + this.treeId = treeId; + nodes = new ArrayList(); + } + + public void addNode(String levelId, String viewpoint) { + if ("0".equals(levelId)) { + entranceViewpoint = viewpoint; + } + + nodes.add(new CallChainTreeNode(levelId, viewpoint)); + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTreeNode.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTreeNode.java new file mode 100644 index 000000000..1816768e5 --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/entity/CallChainTreeNode.java @@ -0,0 +1,15 @@ +package com.ai.cloud.skywalking.web.entity; + +/** + * Created by xin on 16-4-6. + */ +public class CallChainTreeNode { + + private String traceLevelId; + + private String viewPoint; + public CallChainTreeNode(String traceLevelId, String viewpoint) { + this.traceLevelId = traceLevelId; + this.viewPoint = viewpoint; + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/filter/AccessControllerFilter.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/filter/AccessControllerFilter.java index c274e96d0..4514a1222 100644 --- a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/filter/AccessControllerFilter.java +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/filter/AccessControllerFilter.java @@ -7,6 +7,8 @@ import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * Created by xin on 16-3-28. @@ -14,22 +16,27 @@ import java.io.IOException; public class AccessControllerFilter implements Filter { + private List contained = new ArrayList<>(); + @Override public void init(FilterConfig filterConfig) throws ServletException { - + contained.add("applicationList"); + contained.add("addApplication"); + contained.add("createGlobalApplication"); + contained.add("modifyApplication"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; - - LoginUserInfo loginUserInfo = (LoginUserInfo) request.getSession() - .getAttribute(Constants.SESSION_LOGIN_INFO_KEY); - if (loginUserInfo == null) { - ((HttpServletResponse) servletResponse).sendRedirect(request.getContextPath() + "/usr/login"); + if (contained.contains(request.getParameter("loadType"))){ + LoginUserInfo loginUserInfo = (LoginUserInfo) request.getSession() + .getAttribute(Constants.SESSION_LOGIN_INFO_KEY); + if (loginUserInfo == null) { + ((HttpServletResponse) servletResponse).sendRedirect(request.getContextPath() + "/usr/login"); + } } - filterChain.doFilter(servletRequest, servletResponse); } diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/CallChainTreeService.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/CallChainTreeService.java new file mode 100644 index 000000000..13a973b31 --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/impl/CallChainTreeService.java @@ -0,0 +1,46 @@ +package com.ai.cloud.skywalking.web.service.impl; + +import com.ai.cloud.skywalking.web.dao.inter.ICallChainTreeDao; +import com.ai.cloud.skywalking.web.dao.inter.IChainDetailDao; +import com.ai.cloud.skywalking.web.entity.CallChainTree; +import com.ai.cloud.skywalking.web.service.inter.ICallChainTreeService; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +@Service +public class CallChainTreeService implements ICallChainTreeService { + + private Logger logger = LogManager.getLogger(CallChainTreeService.class); + + @Autowired + private IChainDetailDao iChainDetailDao; + + @Autowired + private ICallChainTreeDao chainTreeDao; + + @Override + public List queryCurrentMonthCallChainTree(String uid, String viewpoint) throws SQLException, IOException { + List chainTreeIds = iChainDetailDao.queryChainTreeIds(uid,viewpoint); + logger.info("viewpoint key :{}, chainTreeIds : {}", viewpoint, chainTreeIds); + List callChainTrees = new ArrayList(); + Calendar calendar = Calendar.getInstance(); + String monthSuffix = "/" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1); + for (String treeId : chainTreeIds) { + CallChainTree chainTree = chainTreeDao.queryTreeId(treeId + monthSuffix); + if (chainTree == null) { + continue; + } + callChainTrees.add(chainTree); + } + logger.info("viewpoint key :{}, chainTree size : {}", viewpoint, callChainTrees.size()); + return callChainTrees; + } +} diff --git a/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/inter/ICallChainTreeService.java b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/inter/ICallChainTreeService.java new file mode 100644 index 000000000..dd64aa89e --- /dev/null +++ b/skywalking-webui/src/main/java/com/ai/cloud/skywalking/web/service/inter/ICallChainTreeService.java @@ -0,0 +1,14 @@ +package com.ai.cloud.skywalking.web.service.inter; + +import com.ai.cloud.skywalking.web.entity.CallChainTree; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +/** + * Created by xin on 16-4-6. + */ +public interface ICallChainTreeService { + List queryCurrentMonthCallChainTree(String uid, String viewpoint) throws SQLException, IOException; +} diff --git a/skywalking-webui/src/main/resources/config.properties b/skywalking-webui/src/main/resources/config.properties index 5ce38db81..e930f433a 100644 --- a/skywalking-webui/src/main/resources/config.properties +++ b/skywalking-webui/src/main/resources/config.properties @@ -1,2 +1,2 @@ -hbaseconfig.quorum=10.1.235.197,10.1.235.198,10.1.235.199 +hbaseconfig.quorum=10.1.241.18,10.1.241.19,10.1.241.20 hbaseconfig.client_port=29181 \ No newline at end of file diff --git a/skywalking-webui/src/main/resources/jdbc.properties b/skywalking-webui/src/main/resources/jdbc.properties index 2cbdf3dac..fcbb2a288 100644 --- a/skywalking-webui/src/main/resources/jdbc.properties +++ b/skywalking-webui/src/main/resources/jdbc.properties @@ -1,7 +1,7 @@ jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://10.1.228.202:31316/test -jdbc.username=devrdbusr21 -jdbc.password=devrdbusr21 +jdbc.url=jdbc:mysql://10.1.241.20:31306/sw_db +jdbc.username=sw_dbusr01 +jdbc.password=sw_dbusr01 jdbc.maxTotal=200 jdbc.maxIdle=50 jdbc.maxWaitMillis=1000 diff --git a/skywalking-webui/src/main/webapp/WEB-INF/web.xml b/skywalking-webui/src/main/webapp/WEB-INF/web.xml index fec0e88c2..4b856397e 100644 --- a/skywalking-webui/src/main/webapp/WEB-INF/web.xml +++ b/skywalking-webui/src/main/webapp/WEB-INF/web.xml @@ -11,7 +11,7 @@ AccessControllerFilter - /usr/applications/* + /mainPage diff --git a/skywalking-webui/src/main/webapp/bower_components/skywalking/js/application.js b/skywalking-webui/src/main/webapp/bower_components/skywalking/js/application.js new file mode 100644 index 000000000..8e3c3040b --- /dev/null +++ b/skywalking-webui/src/main/webapp/bower_components/skywalking/js/application.js @@ -0,0 +1,402 @@ +function del(applicationId) { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl + "/usr/applications/del/" + applicationId; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + $("#allApplications").empty(); + loadAllApplications(); + } else { + $("#errormessage").text(data.message); + $("#errorMessageAlert").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorMessageAlert").show(); + } + }); +} + +function loadAllApplications(){ + var baseUrl = $("#baseUrl").text(); + var url = baseUrl + "/usr/applications/all"; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + var template = $.templates("#applicationsAllTmpl"); + var htmlOutput = template.render({applications:jQuery.parseJSON(data.result)}); + $("#mainPanel").empty(); + $("#mainPanel").html(htmlOutput); + } else { + $("#errormessage").text(data.message); + $("#errorMessageAlert").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorMessageAlert").show(); + } + }); +} + +function addApplication(){ + $('#isGlobalConfig').bootstrapToggle(); + var baseUrl = $("#baseUrl").text(); + $("#isGlobalConfig").change(function () { + if ($(this).prop("checked")) { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", true); + }); + $("#isModifyGlobalConfig").show(); + } else { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", false); + }); + $("#isUpdateGlobalConfig").prop("checked", false); + $("#isModifyGlobalConfig").hide(); + } + }); + + $("#isUpdateGlobalConfig").change(function () { + if ($(this).prop("checked")) { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", ""); + }); + } else { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", "disabled"); + }); + } + }); + + $("#saveApplicationBtn").click(function () { + var url = baseUrl + "/usr/applications/dosave"; + $.ajax({ + type: 'POST', + url: url, + data: { + "appInfo": function () { + var application = {}; + application.appCode = $("#appCode").val(); + application.appDesc = $("#appDesc").val(); + application.isGlobalConfig = $("#isGlobalConfig").prop("checked"); + application.isUpdateGlobalConfig = $("#isUpdateGlobalConfig").prop("checked"); + + var configArgs = {}; + configArgs.period = $("#period").val(); + + var mailInfo = {}; + mailInfo.mailTo = $("#mailTo").val().split(","); + mailInfo.mailCc = $("#mailCc").val().split(","); + + configArgs.mailInfo = mailInfo; + application.configArgs = configArgs; + + return JSON.stringify(application); + } + }, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + $("#successCreatedMessageAlter").show(); + } else { + $("#errormessage").text(data.message); + $("#errorMessageAlter").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorMessageAlter").show(); + } + }); + }); + loadDefaultAlarmRule(); +} + +function loadDefaultAlarmRule() { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl + "/usr/applications/alarm-rule/global"; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == "200") { + if (data.result == "") { + $("#globalConfigAlter").show(); + $("#isGlobalConfig").prop("checked", false).change(); + $("#isGlobalConfig").prop("disabled", "disabled"); + $("#isModifyGlobalConfig").hide(); + } else { + $("#isGlobalConfig").prop("checked", true).change(); + $("#isModifyGlobalConfig").show(); + var globalConfig = jQuery.parseJSON(data.result); + $("#globalAlarmRuleId").val(globalConfig.ruleId) + $("#period").val(globalConfig.configArgs.period); + $("#mailTo").val(globalConfig.configArgs.mailInfo.mailTo); + $("#mailCc").val(globalConfig.configArgs.mailInfo.mailCc); + } + } else { + $("#errormessage").text(data.message); + $("#errorMessageAlter").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal Message"); + $("#errorMessageAlter").show(); + } + }); +} + +function createGlobalConfig(){ + $('button[data-loading-text]').click(function () { + //var btn = $(this).button('loading'); + var baseUrl = $("#baseUrl").text(); + var url = baseUrl +"/usr/applications/alarm-rule/global/save" + $.ajax({ + type: 'POST', + url: url, + data: { + "configArgs": function () { + var configArg = {}; + var mailInfo = {}; + configArg.period = parseInt($("#period").val()); + mailInfo.mailTo = $("#mailTo").val().split(","); + mailInfo.mailCc = $("#mailCc").val().split(","); + configArg.mailInfo = mailInfo; + return JSON.stringify(configArg); + } + }, + dataType: 'json', + success: function (data) { + if (data.code == "200") { + $("#saveGlobalSuccessAlter").show(); + } else { + $("#saveGlobalFailedConfigAlter").show(); + $("#errormessage").text(data.message); + } + //btn.button('reset'); + }, + error: function () { + $("#saveGlobalFailedConfigAlter").show(); + $("#errormessage").text("Fatal error!"); + } + }); + + }); +} + +function loadAlarmRule(applicationId) { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl +"/usr/applications/alarm-rule/load/" + applicationId; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + var alarmRules = jQuery.parseJSON(data.result); + if (alarmRules.isGlobalAlarm) { + $("#period").val(alarmRules.globalAlarmRule.configArgs.period); + $("#mailTo").val(alarmRules.globalAlarmRule.configArgs.mailInfo.mailTo); + $("#mailCc").val(alarmRules.globalAlarmRule.configArgs.mailInfo.mailCc); + } else { + $("#period").val(alarmRules.selfAlarmRule.configArgs.period); + $("#mailTo").val(alarmRules.selfAlarmRule.configArgs.mailInfo.mailTo); + $("#mailCc").val(alarmRules.selfAlarmRule.configArgs.mailInfo.mailCc); + } + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorMessageAlter").show(); + } + }); +} + + +function loadApplicationInfo(applicationId) { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl +"/usr/applications/load/" + applicationId; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + var application = jQuery.parseJSON(data.result); + $("#appCode").text(application.appCode); + $("#appDesc").val(application.appDecs); + if (application.isGlobalAlarmRule) { + $("#isGlobalConfig").prop("checked", true).change(); + $("#isModifyGlobalConfig").show(); + } else { + $("#isGlobalConfig").prop("checked", false).change(); + $("#isModifyGlobalConfig").hide(); + } + + if (!application.hasGlobalAlarmRule) { + $("#isGlobalConfig").prop("checked", false).change(); + $("#isGlobalConfig").prop("disabled", "disabled"); + } + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorModifiedMessageAlter").show(); + } + }); +} + +function loadDefaultAlarmRuleData() { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl +"/usr/applications/alarm-rule/global"; + $.ajax({ + type: 'POST', + url: url, + dataType: 'json', + success: function (data) { + if (data.code == "200") { + if (data.result == "") { + $("#period").val(""); + $("#mailTo").val(""); + $("#mailCc").val(""); + } else { + var globalConfig = jQuery.parseJSON(data.result); + $("#globalAlarmRuleId").val(globalConfig.ruleId) + $("#period").val(globalConfig.configArgs.period); + $("#mailTo").val(globalConfig.configArgs.mailInfo.mailTo); + $("#mailCc").val(globalConfig.configArgs.mailInfo.mailCc); + } + } else { + $("#errormessage").text(data.message); + $("#errorModifiedMessageAlter").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorModifiedMessageAlter").show(); + } + }); +} + +function modifyApplication(){ + $('#isGlobalConfig').bootstrapToggle(); + $("#isGlobalConfig").change(function () { + if ($(this).prop("checked")) { + //替换成 + loadDefaultAlarmRuleData($("#applicationId").val()); + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", true); + }); + $("#isModifyGlobalConfig").show(); + } else { + // + loadAlarmRule($("#applicationId").val()); + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", false); + }); + $("#isUpdateGlobalConfig").prop("checked", false); + $("#isModifyGlobalConfig").hide(); + } + }); + + $("#isUpdateGlobalConfig").change(function () { + if ($(this).prop("checked")) { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", ""); + }); + } else { + $("#sysConfigParam input").each(function () { + $(this).prop("disabled", "disabled"); + }); + } + }); + + $("#updateBtn").click(function () { + var baseUrl = $("#baseUrl").text(); + var url = baseUrl +"/usr/applications/update/" + $("#applicationId").val(); + $.ajax({ + type: 'POST', + url: url, + data: { + "appInfo": function () { + var application = {}; + application.appDesc = $("#appDesc").val(); + application.isGlobalConfig = $("#isGlobalConfig").prop("checked"); + application.isUpdateGlobalConfig = $("#isUpdateGlobalConfig").prop("checked"); + + var configArgs = {}; + configArgs.period = $("#period").val(); + + var mailInfo = {}; + mailInfo.mailTo = $("#mailTo").val().split(","); + mailInfo.mailCc = $("#mailCc").val().split(","); + + configArgs.mailInfo = mailInfo; + application.configArgs = configArgs; + + return JSON.stringify(application); + } + }, + dataType: 'json', + success: function (data) { + if (data.code == 200) { + $("#successModifiedMessageAlter").show(); + } else { + $("#errormessage").text(data.message); + $("#errorModifiedMessageAlter").show(); + } + }, + error: function () { + $("#errormessage").text("Fatal error"); + $("#errorModifiedMessageAlter").show(); + } + }); + }); + loadApplicationInfo($("#applicationId").val()); +} + +function toDownloadAuthFile(){ + $("#downloadBtn").click(function () { + downloadAuthFile(); + }) +} + +function downloadAuthFile() { + var baseUrl = $("#baseUrl").text(); + var applicationId = $("#applicationId").val(); + if (applicationId == "") { + $("#message").text("Application Id cannot be null"); + $("#warningAlter").show(); + return; + } + var form = $("
"); + form.attr("style", "display:none"); + form.attr("method", "post"); + form.attr("action", baseUrl + "/usr/applications/authfile/download/" + applicationId); + var exportData = $(""); + exportData.attr("type", "hidden"); + exportData.attr("name", "exportData"); + exportData.attr("value", (new Date()).getMilliseconds()); + var exclusiveException = $(""); + exclusiveException.attr("type", "hidden"); + exclusiveException.attr("name", "exclusiveException"); + exclusiveException.attr("value", $("#exclusiveException").val()); + var authType = $(""); + authType.attr("type", "hidden"); + authType.attr("name", "authType"); + authType.attr("value", $("#authType").val()); + $("#authFiledownLoad").append(form); + form.append(exportData); + form.append(exclusiveException); + form.append(authType); + form.submit(); +} \ No newline at end of file diff --git a/skywalking-webui/src/main/webapp/pages/anls-result/analysisResult.ftl b/skywalking-webui/src/main/webapp/pages/anls-result/analysisResult.ftl index 93255667a..bdae3a210 100644 --- a/skywalking-webui/src/main/webapp/pages/anls-result/analysisResult.ftl +++ b/skywalking-webui/src/main/webapp/pages/anls-result/analysisResult.ftl @@ -30,12 +30,24 @@ diff --git a/skywalking-webui/src/main/webapp/pages/common/commons.ftl b/skywalking-webui/src/main/webapp/pages/common/commons.ftl index a436d6bb6..61f2276f0 100644 --- a/skywalking-webui/src/main/webapp/pages/common/commons.ftl +++ b/skywalking-webui/src/main/webapp/pages/common/commons.ftl @@ -3,6 +3,7 @@ + <#macro navbar> @@ -32,9 +33,9 @@ diff --git a/skywalking-webui/src/main/webapp/pages/common/traceInfo.ftl b/skywalking-webui/src/main/webapp/pages/common/traceInfo.ftl index 5da3870f2..e8989b58b 100644 --- a/skywalking-webui/src/main/webapp/pages/common/traceInfo.ftl +++ b/skywalking-webui/src/main/webapp/pages/common/traceInfo.ftl @@ -33,7 +33,7 @@
  • 应用Code:{{>applicationId}}
  • 主机信息:{{>address}}}
  • 调用进程号:{{>processNo}}
  • -
  • 异常堆栈: +
  • 异常堆栈: {{if exceptionStack}} {{>exceptionStack}} {{/if}} diff --git a/skywalking-webui/src/main/webapp/pages/index.ftl b/skywalking-webui/src/main/webapp/pages/index.ftl index 63dc3eab8..560f9f00b 100644 --- a/skywalking-webui/src/main/webapp/pages/index.ftl +++ b/skywalking-webui/src/main/webapp/pages/index.ftl @@ -29,9 +29,9 @@ diff --git a/skywalking-webui/src/main/webapp/pages/main.ftl b/skywalking-webui/src/main/webapp/pages/main.ftl new file mode 100644 index 000000000..6c2b61fdf --- /dev/null +++ b/skywalking-webui/src/main/webapp/pages/main.ftl @@ -0,0 +1,103 @@ +<#import "./common/commons.ftl" as common> +<#import "./common/traceInfo.ftl" as traceInfo> +<#import "./usr/applications/applicationMaintain.ftl" as applicationMaintain> +<#import "./usr/authfile/auth.ftl" as auth> + + + + + + +<@common.importResources /> + + + + + + + + + + + + +<@common.navbar/> + +<@traceInfo.traceTableTmpl/> +<@traceInfo.traceLogTmpl/> +<@traceInfo.traceTreeAllTmpl/> + +<@applicationMaintain.applicationList/> +<@applicationMaintain.addApplication/> +<@applicationMaintain.createglobalConfig/> +<@applicationMaintain.modifyApplication/> +<@auth.downloadAuth/> + +
    + + +
    + + + + diff --git a/skywalking-webui/src/main/webapp/pages/searchResult.ftl b/skywalking-webui/src/main/webapp/pages/searchResult.ftl deleted file mode 100644 index 449d7f554..000000000 --- a/skywalking-webui/src/main/webapp/pages/searchResult.ftl +++ /dev/null @@ -1,36 +0,0 @@ -<#import "./common/commons.ftl" as common> -<#import "./common/traceInfo.ftl" as traceInfo> - - - - - - -<@common.importResources /> - - - - - - - - - - - -<@common.navbar/> -<@traceInfo.traceTableTmpl/> -<@traceInfo.traceLogTmpl/> -<@traceInfo.traceTreeAllTmpl/> - -
    - -
    - - - - diff --git a/skywalking-webui/src/main/webapp/pages/usr/applications/addapplication.ftl b/skywalking-webui/src/main/webapp/pages/usr/applications/addapplication.ftl deleted file mode 100644 index 9d7b47361..000000000 --- a/skywalking-webui/src/main/webapp/pages/usr/applications/addapplication.ftl +++ /dev/null @@ -1,235 +0,0 @@ -<#import "../../common/commons.ftl" as common> - - - - - - -<@common.importResources /> - Add new application - - - - - -<@common.navbar/> -
    - - - -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - -
    - -
    -
    - 告警配置 -
    -
    -
    - -
    - -
    -
    -
    - -
    - 发送邮件 -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - - - diff --git a/skywalking-webui/src/main/webapp/pages/usr/applications/applicationMaintain.ftl b/skywalking-webui/src/main/webapp/pages/usr/applications/applicationMaintain.ftl new file mode 100644 index 000000000..d9b940923 --- /dev/null +++ b/skywalking-webui/src/main/webapp/pages/usr/applications/applicationMaintain.ftl @@ -0,0 +1,352 @@ +<#macro applicationList> + + + +<#macro addApplication> + + + + +<#macro createglobalConfig> + + + +<#macro modifyApplication> + + \ No newline at end of file diff --git a/skywalking-webui/src/main/webapp/pages/usr/applications/applicationsconfig.ftl b/skywalking-webui/src/main/webapp/pages/usr/applications/applicationsconfig.ftl deleted file mode 100644 index 454b961b7..000000000 --- a/skywalking-webui/src/main/webapp/pages/usr/applications/applicationsconfig.ftl +++ /dev/null @@ -1,113 +0,0 @@ -<#import "../../common/commons.ftl" as common> - - - - - - -<@common.importResources /> - All Applications configuration - - - - -<@common.navbar/> -
    - -
    -
    -
    - - - - - - - - - - - -
    应用编码创建时间更新时间操作
    -
    -
    -
    -
    -
    -
    - - - - diff --git a/skywalking-webui/src/main/webapp/pages/usr/applications/createglobalconfig.ftl b/skywalking-webui/src/main/webapp/pages/usr/applications/createglobalconfig.ftl deleted file mode 100644 index e17913a34..000000000 --- a/skywalking-webui/src/main/webapp/pages/usr/applications/createglobalconfig.ftl +++ /dev/null @@ -1,133 +0,0 @@ -<#import "../../common/commons.ftl" as common> - - - - - - -<@common.importResources /> - To create global configuration - - - - - -<@common.navbar/> -
    - - -
    -
    -
    -
    -
    -
    - 告警配置 -
    -
    -
    - -
    - -
    -
    -
    - -
    - 发送邮件 -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - - diff --git a/skywalking-webui/src/main/webapp/pages/usr/applications/modifyapplication.ftl b/skywalking-webui/src/main/webapp/pages/usr/applications/modifyapplication.ftl deleted file mode 100644 index f79155067..000000000 --- a/skywalking-webui/src/main/webapp/pages/usr/applications/modifyapplication.ftl +++ /dev/null @@ -1,288 +0,0 @@ -<#import "../../common/commons.ftl" as common> - - - - - - -<@common.importResources /> - Modify application configuration - - - - - -<@common.navbar/> -
    - - -
    -
    -
    -
    -
    - - -
    -

    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - -
    - -
    -
    - 告警配置 -
    -
    -
    - -
    - -
    -
    -
    - -
    - 发送邮件 -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - - - diff --git a/skywalking-webui/src/main/webapp/pages/usr/authfile/auth.ftl b/skywalking-webui/src/main/webapp/pages/usr/authfile/auth.ftl new file mode 100644 index 000000000..5b4866f19 --- /dev/null +++ b/skywalking-webui/src/main/webapp/pages/usr/authfile/auth.ftl @@ -0,0 +1,55 @@ +<#macro downloadAuth> + + \ No newline at end of file diff --git a/skywalking-webui/src/main/webapp/pages/usr/authfile/download.ftl b/skywalking-webui/src/main/webapp/pages/usr/authfile/download.ftl deleted file mode 100644 index ff5c5aa0a..000000000 --- a/skywalking-webui/src/main/webapp/pages/usr/authfile/download.ftl +++ /dev/null @@ -1,107 +0,0 @@ -<#import "../../common/commons.ftl" as common> - - - - - - -<@common.importResources /> - Download auth file - - - -<@common.navbar/> -
    - -
    -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -