2024-09-20 17:22 장애로그 목록 작업
This commit is contained in:
parent
045f48b4e5
commit
057f5655b7
@ -0,0 +1,17 @@
|
|||||||
|
package seed.manager.errorlogs.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import seed.map.T_ERROR_LOGS;
|
||||||
|
|
||||||
|
public interface ManagerErrorLogsService {
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public T_ERROR_LOGS getErrorLogsForm(Integer errorLogsIdx);
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public Long getErrorLogsListCnt(String column, String search);
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public List<T_ERROR_LOGS> getErrorLogsList(int page, int row, String orderColumn, String order, String column, String search, String[] qryColumns);
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package seed.manager.errorlogs.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import egovframework.rte.fdl.cmmn.AbstractServiceImpl;
|
||||||
|
|
||||||
|
import seed.dao.ErrorLogsDAO;
|
||||||
|
import seed.map.T_ERROR_LOGS;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ManagerErrorLogsServiceImpl extends AbstractServiceImpl implements ManagerErrorLogsService{
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ErrorLogsDAO errorLogsDAO;
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public T_ERROR_LOGS getErrorLogsForm(Integer errorLogsIdx){
|
||||||
|
|
||||||
|
return errorLogsDAO.getErrorLogsForm(errorLogsIdx);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public Long getErrorLogsListCnt(String column, String search){
|
||||||
|
|
||||||
|
return errorLogsDAO.getErrorLogsListCnt(column, search);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ManagerErrorLogsController
|
||||||
|
public List<T_ERROR_LOGS> getErrorLogsList(int page, int row, String orderColumn, String order, String column, String search, String[] qryColumns){
|
||||||
|
|
||||||
|
return errorLogsDAO.getErrorLogsList(((page-1) * row), row, orderColumn, order, column, search, qryColumns);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,320 @@
|
|||||||
|
package seed.manager.errorlogs.web;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.RandomAccessFile;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import seed.manager.errorlogs.service.ManagerErrorLogsService;
|
||||||
|
import seed.manager.member.service.ManagerMemberService;
|
||||||
|
import seed.manager.site.service.ManagerSiteManagerService;
|
||||||
|
import seed.utils.InterceptorCheck;
|
||||||
|
import seed.utils.Paging;
|
||||||
|
import seed.utils.SeedUtils;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class ManagerErrorLogsController {
|
||||||
|
|
||||||
|
private Logger log = Logger.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ManagerErrorLogsService managerErrorLogsService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ManagerMemberService managerMemberService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ManagerSiteManagerService managerSiteManagerService;
|
||||||
|
|
||||||
|
@Value("#{config['was.log.path']}")
|
||||||
|
private String wasLogPath;
|
||||||
|
|
||||||
|
public void getSeedLicense(HttpServletResponse httpServletResponse){
|
||||||
|
|
||||||
|
if(SeedUtils.setReplaceNull(InterceptorCheck.getLicenseKey()).equals("")){
|
||||||
|
try {
|
||||||
|
httpServletResponse.sendRedirect("/common/seed.do");
|
||||||
|
} catch (IOException ex) {
|
||||||
|
log.error("CHECK ERROR:",ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSessionRemove(HttpSession session){
|
||||||
|
session.removeAttribute("memberIdx");
|
||||||
|
session.removeAttribute("memberId");
|
||||||
|
session.removeAttribute("memberName");
|
||||||
|
session.removeAttribute("memberDept");
|
||||||
|
session.removeAttribute("memberPosition");
|
||||||
|
session.removeAttribute("memberTel");
|
||||||
|
session.removeAttribute("memberPhone");
|
||||||
|
session.removeAttribute("memberEmail1");
|
||||||
|
session.removeAttribute("memberEmail2");
|
||||||
|
session.removeAttribute("memberGrant");
|
||||||
|
|
||||||
|
session.removeAttribute("url");
|
||||||
|
session.removeAttribute("message");
|
||||||
|
session.removeAttribute("opener");
|
||||||
|
session.removeAttribute("append");
|
||||||
|
session.removeAttribute("self");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSessionMessageRemove(HttpSession session){
|
||||||
|
session.removeAttribute("url");
|
||||||
|
session.removeAttribute("message");
|
||||||
|
session.removeAttribute("opener");
|
||||||
|
session.removeAttribute("append");
|
||||||
|
session.removeAttribute("self");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPaging(@ModelAttribute("paging") Paging paging){
|
||||||
|
|
||||||
|
if(paging != null){
|
||||||
|
if(paging.getPage() == null){paging.setPage(1);}
|
||||||
|
if(paging.getRow() == null){paging.setRow(10);}
|
||||||
|
if(paging.getPagec() == null){paging.setPagec(1);}
|
||||||
|
if(paging.getRowc() == null){paging.setRowc(10);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/gtm/{siteIdx}/errorLogsLive.do")
|
||||||
|
public ModelAndView getErrorLogsLive(HttpServletResponse httpServletResponse, HttpSession session, Map<String, Object> map,
|
||||||
|
@PathVariable(value="siteIdx") String siteIdx){
|
||||||
|
|
||||||
|
getSeedLicense(httpServletResponse);
|
||||||
|
|
||||||
|
setSessionMessageRemove(session);
|
||||||
|
|
||||||
|
Integer memberIdx = Integer.valueOf(SeedUtils.setReplaceNull(session.getAttribute("memberIdx"),"0"));
|
||||||
|
String memberGrant = (memberIdx == 0) ? "N" : SeedUtils.setReplaceNull(managerMemberService.getMemberMapForm(memberIdx, new String[] {"memberGrant"}).get("_memberGrant"), "N");
|
||||||
|
boolean memberAuth = managerSiteManagerService.getSiteManagerListCnt(siteIdx, memberIdx);
|
||||||
|
|
||||||
|
if(memberIdx == 0 || (!memberGrant.equals("S") && !memberAuth)){
|
||||||
|
setSessionRemove(session);
|
||||||
|
map.put("url", "/gtm/login.do");
|
||||||
|
map.put("message", "common.message.no.grant");
|
||||||
|
return new ModelAndView("/_common/jsp/message");
|
||||||
|
}
|
||||||
|
|
||||||
|
//해당 WAS폴더의 파일리스트 가져옴
|
||||||
|
ArrayList<Map<String, Object>> fileList = SeedUtils.getSeedDirFiles(wasLogPath, "F");
|
||||||
|
|
||||||
|
map.put("fileList", fileList);
|
||||||
|
|
||||||
|
return new ModelAndView("/manager/errorlogs/errorLogsLive");
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/gtm/proc/{siteIdx}/errorLogsLiveProc.do", method=RequestMethod.POST)
|
||||||
|
public ModelAndView setErrorLogsLiveProc(HttpServletRequest httpServletRequest,
|
||||||
|
HttpServletResponse httpServletResponse, HttpSession session, Map<String, Object> map,
|
||||||
|
@PathVariable(value="siteIdx") String siteIdx,
|
||||||
|
@RequestParam(value="fileName", defaultValue="", required=false) String fileName,
|
||||||
|
@RequestParam(value="preEndPoint", defaultValue="0", required=false) Long preEndPoint){
|
||||||
|
|
||||||
|
getSeedLicense(httpServletResponse);
|
||||||
|
|
||||||
|
setSessionMessageRemove(session);
|
||||||
|
|
||||||
|
Integer memberIdx = Integer.valueOf(SeedUtils.setReplaceNull(session.getAttribute("memberIdx"),"0"));
|
||||||
|
String memberGrant = (memberIdx == 0) ? "N" : SeedUtils.setReplaceNull(managerMemberService.getMemberMapForm(memberIdx, new String[] {"memberGrant"}).get("_memberGrant"), "N");
|
||||||
|
boolean memberAuth = managerSiteManagerService.getSiteManagerListCnt(siteIdx, memberIdx);
|
||||||
|
|
||||||
|
if(memberIdx == 0 || (!memberGrant.equals("S") && !memberAuth)){
|
||||||
|
setSessionRemove(session);
|
||||||
|
map.put("url", "/gtm/login.do");
|
||||||
|
map.put("message", "common.message.no.grant");
|
||||||
|
return new ModelAndView("/_common/jsp/message");
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder logBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
// ajax 요청에 응답하기 위한 response작업
|
||||||
|
httpServletResponse.setContentType("text/html;charset=UTF-8");
|
||||||
|
|
||||||
|
HashMap<Object, Object> hashMap = new HashMap<Object, Object>();
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
|
||||||
|
String ajaxData = "";
|
||||||
|
|
||||||
|
PrintWriter writer = null;
|
||||||
|
|
||||||
|
if (!"".equals(fileName.trim())) {
|
||||||
|
|
||||||
|
fileName = wasLogPath + fileName.trim().replaceAll("\\.\\.", "");
|
||||||
|
|
||||||
|
long startPoint = 0;
|
||||||
|
long endPoint = 0;
|
||||||
|
|
||||||
|
RandomAccessFile randomAccessFile = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
randomAccessFile = new RandomAccessFile(fileName, "r");
|
||||||
|
endPoint = randomAccessFile.length();
|
||||||
|
|
||||||
|
startPoint = preEndPoint > 0 ? preEndPoint : endPoint < 2000 ? 0 : endPoint - 2000;
|
||||||
|
|
||||||
|
randomAccessFile.seek(startPoint);
|
||||||
|
|
||||||
|
String str;
|
||||||
|
while ((str = randomAccessFile.readLine()) != null) {
|
||||||
|
logBuilder.append(str);
|
||||||
|
logBuilder.append("\n");
|
||||||
|
endPoint = randomAccessFile.getFilePointer();
|
||||||
|
randomAccessFile.seek(endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (FileNotFoundException fnfe) {
|
||||||
|
logBuilder.append("File does not exist.");
|
||||||
|
log.error("CHECK ERROR:",fnfe);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logBuilder.append("Sorry. An error has occurred.");
|
||||||
|
log.error("CHECK ERROR:",e);
|
||||||
|
} finally {
|
||||||
|
try {randomAccessFile.close();} catch (Exception e) {
|
||||||
|
log.error("CHECK ERROR:",e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ajaxData = gson.toJson(hashMap);
|
||||||
|
|
||||||
|
try {
|
||||||
|
hashMap.put("logBuilder", new String(logBuilder.toString().replaceAll("<", "<").replaceAll(">", ">").getBytes("ISO-8859-1"),"EUC-KR"));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
log.error("CHECK ERROR:",e);
|
||||||
|
}
|
||||||
|
|
||||||
|
hashMap.put("endPoint", endPoint);
|
||||||
|
|
||||||
|
ajaxData = gson.toJson(hashMap);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
ajaxData = gson.toJson(hashMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
writer = httpServletResponse.getWriter();
|
||||||
|
writer.write(ajaxData);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("IOException ERROR");
|
||||||
|
} finally{
|
||||||
|
if(writer!=null){writer.flush();writer.close();}
|
||||||
|
}
|
||||||
|
|
||||||
|
//out.print("{\"endPoint\":\"" + endPoint + "\", \"log\":\"" + URLEncoder.encode(new String(log.toString().getBytes("ISO-8859-1"),"UTF-8"), "UTF-8").replaceAll("\\+", "%20") + "\"}");
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/gtm/{siteIdx}/errorLogsList.do")
|
||||||
|
public ModelAndView getErrorLogsList(HttpServletResponse httpServletResponse, HttpSession session, Map<String, Object> map,
|
||||||
|
@PathVariable(value="siteIdx") String siteIdx,
|
||||||
|
@ModelAttribute("paging") Paging paging,
|
||||||
|
@RequestParam(value="orderColumn", defaultValue="errorLogsIdx", required=false) String orderColumn,
|
||||||
|
@RequestParam(value="order", defaultValue="DESC", required=false) String order,
|
||||||
|
@RequestParam(value="column", defaultValue="", required=false) String column,
|
||||||
|
@RequestParam(value="search", defaultValue="", required=false) String search){
|
||||||
|
|
||||||
|
getSeedLicense(httpServletResponse);
|
||||||
|
|
||||||
|
setSessionMessageRemove(session);
|
||||||
|
|
||||||
|
setPaging(paging);
|
||||||
|
|
||||||
|
Integer memberIdx = Integer.valueOf(SeedUtils.setReplaceNull(session.getAttribute("memberIdx"),"0"));
|
||||||
|
String memberGrant = (memberIdx == 0) ? "N" : SeedUtils.setReplaceNull(managerMemberService.getMemberMapForm(memberIdx, new String[] {"memberGrant"}).get("_memberGrant"), "N");
|
||||||
|
boolean memberAuth = managerSiteManagerService.getSiteManagerListCnt(siteIdx, memberIdx);
|
||||||
|
|
||||||
|
if(memberIdx == 0 || (!memberGrant.equals("S") && !memberAuth)){
|
||||||
|
setSessionRemove(session);
|
||||||
|
map.put("url", "/gtm/login.do");
|
||||||
|
map.put("message", "common.message.no.grant");
|
||||||
|
return new ModelAndView("/_common/jsp/message");
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] qryColumns = {"errorLogsIdx", "errorLogsUrl", "errorLogsType", "errorLogsRegDate"};
|
||||||
|
|
||||||
|
paging.setCount(managerErrorLogsService.getErrorLogsListCnt(column, search));
|
||||||
|
|
||||||
|
map.put("errorLogsList", managerErrorLogsService.getErrorLogsList(paging.getPage(), paging.getRow(), orderColumn, order, column, search, qryColumns));
|
||||||
|
map.put("errorLogsListCnt", paging.getCount());
|
||||||
|
|
||||||
|
map.put("page", paging.getPage());
|
||||||
|
map.put("row", paging.getRow());
|
||||||
|
map.put("pages", paging.getPages());
|
||||||
|
map.put("blocks", paging.getBlocks());
|
||||||
|
map.put("block", paging.getBlock());
|
||||||
|
map.put("fPage", paging.getfPage());
|
||||||
|
map.put("lPage", paging.getlPage());
|
||||||
|
|
||||||
|
map.put("orderColumn", orderColumn);
|
||||||
|
map.put("order", order);
|
||||||
|
map.put("column", column);
|
||||||
|
map.put("search", search);
|
||||||
|
|
||||||
|
return new ModelAndView("/manager/errorlogs/errorLogsList");
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/gtm/{siteIdx}/errorLogsView/{errorLogsIdx}.do", method=RequestMethod.GET)
|
||||||
|
public ModelAndView getErrorLogsEdit(HttpServletResponse httpServletResponse, HttpSession session, Map<String, Object> map,
|
||||||
|
@PathVariable(value="siteIdx") String siteIdx,
|
||||||
|
@PathVariable(value="errorLogsIdx") Integer errorLogsIdx,
|
||||||
|
@ModelAttribute("paging") Paging paging,
|
||||||
|
@RequestParam(value="orderColumn", defaultValue="errorLogsIdx", required=false) String orderColumn,
|
||||||
|
@RequestParam(value="order", defaultValue="DESC", required=false) String order,
|
||||||
|
@RequestParam(value="column", defaultValue="", required=false) String column,
|
||||||
|
@RequestParam(value="search", defaultValue="", required=false) String search){
|
||||||
|
|
||||||
|
getSeedLicense(httpServletResponse);
|
||||||
|
|
||||||
|
setSessionMessageRemove(session);
|
||||||
|
|
||||||
|
setPaging(paging);
|
||||||
|
|
||||||
|
Integer memberIdx = Integer.valueOf(SeedUtils.setReplaceNull(session.getAttribute("memberIdx"),"0"));
|
||||||
|
String memberGrant = (memberIdx == 0) ? "N" : SeedUtils.setReplaceNull(managerMemberService.getMemberMapForm(memberIdx, new String[] {"memberGrant"}).get("_memberGrant"), "N");
|
||||||
|
boolean memberAuth = managerSiteManagerService.getSiteManagerListCnt(siteIdx, memberIdx);
|
||||||
|
|
||||||
|
if(memberIdx == 0 || (!memberGrant.equals("S") && !memberAuth)){
|
||||||
|
setSessionRemove(session);
|
||||||
|
map.put("url", "/gtm/login.do");
|
||||||
|
map.put("message", "common.message.no.grant");
|
||||||
|
return new ModelAndView("/_common/jsp/message");
|
||||||
|
}
|
||||||
|
|
||||||
|
map.put("page", paging.getPage());
|
||||||
|
map.put("row", paging.getRow());
|
||||||
|
|
||||||
|
map.put("orderColumn", orderColumn);
|
||||||
|
map.put("order", order);
|
||||||
|
map.put("column", column);
|
||||||
|
map.put("search", search);
|
||||||
|
|
||||||
|
map.put("tErrorLogsDB", managerErrorLogsService.getErrorLogsForm(errorLogsIdx));
|
||||||
|
|
||||||
|
return new ModelAndView("/manager/errorlogs/errorLogsView");
|
||||||
|
}
|
||||||
|
}
|
||||||
143
src/main/webapp/WEB-INF/jsp/manager/errorlogs/errorLogsList.jsp
Normal file
143
src/main/webapp/WEB-INF/jsp/manager/errorlogs/errorLogsList.jsp
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<%@ page contentType="text/html;charset=utf-8" %>
|
||||||
|
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
|
||||||
|
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="ko">
|
||||||
|
<head>
|
||||||
|
<title><s:message code="manager.errorLogs.errorLogsList.title"/></title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="page-title-wrap clear">
|
||||||
|
<div class="page-title-inner">
|
||||||
|
<h3 class="page-title"><s:message code="manager.errorLogs.nav.errorLogsList"/></h3>
|
||||||
|
<div class="tooltipBox type01">
|
||||||
|
<button type="button" class="page-tip">페이지안내</button>
|
||||||
|
<div class="tooltipText">
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sch-content-wrap clear">
|
||||||
|
<form:form name="frmSearch" id="frmSearch" action="/gtm/${siteIdx}/errorLogsList.do" method="post">
|
||||||
|
<input type="hidden" name="page" value="1" />
|
||||||
|
<input type="hidden" name="row" value="<c:out escapeXml='true' value='${row}' />" />
|
||||||
|
<input type="hidden" name="orderColumn" value="<c:out escapeXml='true' value='${orderColumn}' />" />
|
||||||
|
<input type="hidden" name="order" value="<c:out escapeXml='true' value='${order}' />" />
|
||||||
|
<fieldset>
|
||||||
|
<legend>검색 폼</legend>
|
||||||
|
<select name="column" id="column" title="<s:message code="common.select.option.value"/>" class="sch-select">
|
||||||
|
<option value="A" <c:if test="${column == 'A'}">selected="selected"</c:if>><s:message code="common.select.option.value.all"/></option>
|
||||||
|
<option value="errorLogsUrl" <c:if test="${column == 'errorLogsUrl'}">selected="selected"</c:if>><s:message code="manager.errorLogs.errorLogsList.errorLogsUrl"/></option>
|
||||||
|
<option value="errorLogsType" <c:if test="${column == 'errorLogsType'}">selected="selected"</c:if>><s:message code="manager.errorLogs.errorLogsList.errorLogsType"/></option>
|
||||||
|
</select>
|
||||||
|
<input type="search" name="search" id="search" value="<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.search.value"/>" class="sch-text">
|
||||||
|
<button type="submit" class="btn-page-sch"><s:message code="common.button.search"/></button>
|
||||||
|
</fieldset>
|
||||||
|
</form:form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="more-btn-box">
|
||||||
|
<button type="button" id="moreTableItem" class="more-table-item">칼럼 더보기</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-wrap">
|
||||||
|
<div class="table-layout br-none">
|
||||||
|
<table>
|
||||||
|
<caption><s:message code="manager.errorLogs.errorLogsList.table.caption"/></caption>
|
||||||
|
<colgroup>
|
||||||
|
<col class="item-tablet-hidden checkbox_small">
|
||||||
|
<col class="title">
|
||||||
|
<col class="item-mobile-hidden">
|
||||||
|
<col>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="item-tablet-hidden"><s:message code="common.num"/></th>
|
||||||
|
<th scope="col"><s:message code="manager.errorLogs.errorLogsList.errorLogsUrl"/> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsUrl&order=ASC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.up"/>" width="7" height="10" alt="<s:message code="common.move.up"/>" /></a></span> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsUrl&order=DESC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.down"/>" width="7" height="10" alt="<s:message code="common.move.down"/>" /></a></span></th>
|
||||||
|
<th scope="col" class="item-mobile-hidden"><s:message code="manager.errorLogs.errorLogsList.errorLogsType"/> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsType&order=ASC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.up"/>" width="7" height="10" alt="<s:message code="common.move.up"/>" /></a></span> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsType&order=DESC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.down"/>" width="7" height="10" alt="<s:message code="common.move.down"/>" /></a></span></th>
|
||||||
|
<th scope="col"><s:message code="common.regDate"/> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsRegDate&order=ASC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.up"/>" width="7" height="10" alt="<s:message code="common.move.up"/>" /></a></span> <span><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=errorLogsRegDate&order=DESC&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><img src="<s:message code="common.column.down"/>" width="7" height="10" alt="<s:message code="common.move.down"/>" /></a></span></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${!empty errorLogsList}">
|
||||||
|
<c:forEach items="${errorLogsList}" var="errorLogsList" varStatus="status">
|
||||||
|
<tr>
|
||||||
|
<td class="item-tablet-hidden"><c:out escapeXml='true' value='${errorLogsListCnt - (page-1)*row - status.index}' /></td>
|
||||||
|
<td class="al"><a class="hover-link" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsView/<c:out escapeXml='true' value='${errorLogsList._errorLogsIdx}' />.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><span><c:out escapeXml='true' value='${errorLogsList._errorLogsUrl}' /></span></a></td>
|
||||||
|
<td class="item-mobile-hidden"><a class="hover-link" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsView/<c:out escapeXml='true' value='${errorLogsList._errorLogsIdx}' />.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />"><span><c:out escapeXml='true' value='${errorLogsList._errorLogsType}' /></span></a></td>
|
||||||
|
<td><c:out escapeXml='true' value='${fn:substring(errorLogsList._errorLogsRegDate, 0, 19)}' /></td>
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<tr>
|
||||||
|
<td class="no-data-colspan"><s:message code="common.message.no.data"/></td>
|
||||||
|
</tr>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pagination-container">
|
||||||
|
<div class="pagination-inner clear">
|
||||||
|
<div class="pagination-control prev clear">
|
||||||
|
<a class="first-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=1&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.first"/>" ><s:message code="common.page.first"/></a>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${block > 1}">
|
||||||
|
<a class="prev-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${fPage-1}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.prev"/>" ><s:message code="common.page.prev"/></a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<a class="prev-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.prev"/>" ><s:message code="common.page.prev"/></a>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</div>
|
||||||
|
<ul class="pagination clear">
|
||||||
|
<c:forEach begin="0" end="${lPage-fPage}" var="index" >
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${index+fPage==page}">
|
||||||
|
<li><a class="on" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.now"/>" ><c:out escapeXml='true' value='${page}' /></a></li>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<li><a href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${index+fPage}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<c:out escapeXml='true' value='${index+fPage}' /> <s:message code="common.page.page"/>" ><c:out escapeXml='true' value='${index+fPage}' /></a></li>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
<div class="pagination-control next clear">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${block < blocks}">
|
||||||
|
<a class="next-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${lPage+1}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.next"/>" ><s:message code="common.page.next"/></a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<a class="next-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${page}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.next"/>" ><s:message code="common.page.next"/></a>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
<a class="last-btn" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsList.do?page=<c:out escapeXml='true' value='${pages}' />&row=<c:out escapeXml='true' value='${row}' />&orderColumn=<c:out escapeXml='true' value='${orderColumn}' />&order=<c:out escapeXml='true' value='${order}' />&column=<c:out escapeXml='true' value='${column}' />&search=<c:out escapeXml='true' value='${search}' />" title="<s:message code="common.page.last"/>" ><s:message code="common.page.last"/></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="btn-area">
|
||||||
|
<a class="btn-normal lightgray" id="logsLivePop" href="/gtm/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsLive.do"><s:message code="manager.errorLogs.nav.errorLogsLive"/></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$("#logsLivePop").click(function(){
|
||||||
|
var url = $(this).attr("href");
|
||||||
|
window.open(url,"popLogsLive","width=700, height=760, resizable=yes, location=no, toolbar=no, menubar=no, status=no, scrollbars=yes");
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
234
src/main/webapp/WEB-INF/jsp/manager/errorlogs/errorLogsLive.jsp
Normal file
234
src/main/webapp/WEB-INF/jsp/manager/errorlogs/errorLogsLive.jsp
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
<%@ page contentType="text/html;charset=utf-8" %>
|
||||||
|
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||||
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="ko">
|
||||||
|
<head>
|
||||||
|
<title><s:message code="manager.errorLogs.errorLogsLive.title"/></title>
|
||||||
|
<link rel="stylesheet" href="/css/space.css">
|
||||||
|
<link rel="stylesheet" href="/css/seed.layout.css">
|
||||||
|
<script src="/js/lib/base64.js"></script>
|
||||||
|
<script src="/js/seed.app.js"></script>
|
||||||
|
<script src="/js/lib/jquery.bxslider.min.js"></script>
|
||||||
|
<style type="text/css">
|
||||||
|
#console {
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 600px;
|
||||||
|
overflow-y: auto;
|
||||||
|
background-color: #2f3541;
|
||||||
|
color:white;
|
||||||
|
font-size: 15px;
|
||||||
|
word-wrap:break-word;
|
||||||
|
padding:10px;
|
||||||
|
}
|
||||||
|
.fileName{
|
||||||
|
margin:5px 0 5px 0;
|
||||||
|
}
|
||||||
|
.log-cursor{
|
||||||
|
display:block;
|
||||||
|
width:1px;
|
||||||
|
height:14px;
|
||||||
|
margin:2px 0;
|
||||||
|
background:#fff;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.log-title{
|
||||||
|
position:relative;
|
||||||
|
display:block;
|
||||||
|
margin:5px 0;
|
||||||
|
font-size:14px;
|
||||||
|
margin:15px 0 5px 0;
|
||||||
|
}
|
||||||
|
.row-wrap .row:first-child{
|
||||||
|
margin-top:0;
|
||||||
|
}
|
||||||
|
.row-wrap .row{
|
||||||
|
margin-top:3px;
|
||||||
|
line-height:1.2;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="seed-popup-wrap">
|
||||||
|
|
||||||
|
<div class="page-title-wrap clear">
|
||||||
|
<div class="page-title-inner" style="margin-bottom:0">
|
||||||
|
<h3 class="page-title"><s:message code="manager.errorLogs.nav.errorLogsLive"/></h3>
|
||||||
|
<div class="tooltipBox type01">
|
||||||
|
<button type="button" class="page-tip">페이지안내</button>
|
||||||
|
<div class="tooltipText">
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="clear: both;">
|
||||||
|
<select name="fileName" id="fileName" class="fileName" title="<s:message code="common.select.option.value"/>.">
|
||||||
|
<option value=""><s:message code="common.select.option.value"/></option>
|
||||||
|
<c:forEach items="${fileList}" var="fileList" varStatus="status">
|
||||||
|
<option value="<c:out escapeXml='true' value='${fileList.fileName}' />"><c:out escapeXml='true' value='${fileList.fileName}' /></option>
|
||||||
|
</c:forEach>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
| grep <input class="inpstyle type1" id="grep" type="text" />
|
||||||
|
| grep -v <input class="inpstyle type1" id="grepV" type="text" />
|
||||||
|
-->
|
||||||
|
<div id="console"></div>
|
||||||
|
<div class="btn-area mb5">
|
||||||
|
<button type="button" class="btn-normal violet" id="startTail">START</button>
|
||||||
|
<button type="button" class="btn-normal lightgray" id="stopTail" style="display:none">STOP</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var endPoint = 0;
|
||||||
|
var tailFlag = false;
|
||||||
|
var fileName;
|
||||||
|
var consoleLog;
|
||||||
|
var visibility = false;
|
||||||
|
var isCursorActive = false;
|
||||||
|
var cursorShowTime = null;
|
||||||
|
|
||||||
|
/*
|
||||||
|
var grep;
|
||||||
|
var grepV;
|
||||||
|
var pattern;
|
||||||
|
var patternV;
|
||||||
|
*/
|
||||||
|
|
||||||
|
var match;
|
||||||
|
consoleLog = $('#console');
|
||||||
|
|
||||||
|
function startTail() {
|
||||||
|
|
||||||
|
if($('#fileName').val() == ""){
|
||||||
|
alert("<s:message code="common.select.option.value"/>");
|
||||||
|
$('#fileName').focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName = $('#fileName').val();
|
||||||
|
|
||||||
|
/*
|
||||||
|
grep = $.trim($('#grep').val());
|
||||||
|
grepV = $.trim($('#grepV').val());
|
||||||
|
pattern = new RegExp('.*'+grep+'.*\\n', 'g');
|
||||||
|
patternV = new RegExp('.*'+grepV+'.*\\n', 'g');
|
||||||
|
*/
|
||||||
|
|
||||||
|
function requestLog() {
|
||||||
|
if (tailFlag) {
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type : 'POST',
|
||||||
|
dataType : 'json',
|
||||||
|
url : '/gtm/proc/<c:out escapeXml='true' value='${siteIdx}' />/errorLogsLiveProc.do', // #### Caution: The name of the source file
|
||||||
|
data : {
|
||||||
|
'fileName' : fileName,
|
||||||
|
'preEndPoint' : endPoint
|
||||||
|
},
|
||||||
|
success : function(data) {
|
||||||
|
|
||||||
|
endPoint = data.endPoint == false ? 0 : data.endPoint;
|
||||||
|
logdata = decodeURIComponent(data.logBuilder);
|
||||||
|
|
||||||
|
if( logdata || !isCursorActive ){
|
||||||
|
if( $('.log-cursor').length ){
|
||||||
|
$('.log-cursor').remove();
|
||||||
|
}
|
||||||
|
consoleLog
|
||||||
|
// log text
|
||||||
|
.html(
|
||||||
|
consoleLog.html() + (function(){
|
||||||
|
logdata = logdata.replace(/(?:\r\n|\r|\n)/g, ',').split(',');
|
||||||
|
|
||||||
|
return $('#fileName').val() === $('.log-title').last().text()
|
||||||
|
? '<div class="row">' + logdata.join('</div><div class="row">') + '</div>' : [
|
||||||
|
'<strong class="log-title">'+ $('#fileName').val() +'</strong>',
|
||||||
|
'<div class="row-wrap">',
|
||||||
|
'<div class="row">' + logdata.join('</div><div class="row">') + '</div>',
|
||||||
|
'</div>'
|
||||||
|
].join('');
|
||||||
|
}())
|
||||||
|
)
|
||||||
|
// cursor
|
||||||
|
.append(
|
||||||
|
$('<span></span>').addClass('log-cursor')
|
||||||
|
)
|
||||||
|
|
||||||
|
.scrollTop(
|
||||||
|
consoleLog.prop('scrollHeight')
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(requestLog, 1000);
|
||||||
|
|
||||||
|
if( !isCursorActive ){
|
||||||
|
startLogCursor( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
error : function(e) {
|
||||||
|
console.log(e.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
requestLog();
|
||||||
|
}
|
||||||
|
|
||||||
|
function startLogCursor( timer ){
|
||||||
|
isCursorActive = true;
|
||||||
|
clearTimeout( cursorShowTime );
|
||||||
|
cursorShowTime = setTimeout(function(){
|
||||||
|
$('.log-cursor').css('visibility', !visibility ? 'visible' : 'hidden' );
|
||||||
|
visibility = !visibility;
|
||||||
|
startLogCursor( 600 );
|
||||||
|
}, timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopLogCursor() {
|
||||||
|
isCursorActive = false;
|
||||||
|
visibility = false;
|
||||||
|
$('.log-cursor').css('visibility', 'hidden' );
|
||||||
|
clearTimeout( cursorShowTime );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$('#startTail').on('click', function() {
|
||||||
|
if( !tailFlag ){
|
||||||
|
tailFlag = true;
|
||||||
|
startTail();
|
||||||
|
$(this).hide();
|
||||||
|
$('#stopTail').show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#stopTail').on('click', function() {
|
||||||
|
tailFlag = false;
|
||||||
|
stopLogCursor();
|
||||||
|
$(this).hide();
|
||||||
|
$('#startTail').show();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#fileName').change(function() {
|
||||||
|
tailFlag = false;
|
||||||
|
stopLogCursor();
|
||||||
|
endPoint = 0;
|
||||||
|
$('#startTail').show();
|
||||||
|
$('#stopTail').hide();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue
Block a user