@@ -172,6 +172,9 @@ $(document).ready(function() {
|
|||||||
<form id="ajaxForm">
|
<form id="ajaxForm">
|
||||||
<input type="hidden" name="id">
|
<input type="hidden" name="id">
|
||||||
<table class="table_row" cellspacing="0">
|
<table class="table_row" cellspacing="0">
|
||||||
|
<colgroup>
|
||||||
|
<col width="200px">
|
||||||
|
</colgroup>
|
||||||
<tr>
|
<tr>
|
||||||
<th><%= localeMessage.getString("messageTemplate.messageCode") %> <font color="red"> *</font></th>
|
<th><%= localeMessage.getString("messageTemplate.messageCode") %> <font color="red"> *</font></th>
|
||||||
<td><input type="text" name="messageCode" data-required data-warning="메세지 코드는 필수입니다"/></td>
|
<td><input type="text" name="messageCode" data-required data-warning="메세지 코드는 필수입니다"/></td>
|
||||||
|
|||||||
@@ -76,6 +76,15 @@
|
|||||||
return cellvalue.substring(1, 4);
|
return cellvalue.substring(1, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function apiStatusFormatter(cellvalue, options, rowObject) {
|
||||||
|
switch (cellvalue) {
|
||||||
|
case 'E': return '장애';
|
||||||
|
case 'D': return '지연';
|
||||||
|
case 'C': return '점검';
|
||||||
|
default: return '정상';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function list() {
|
function list() {
|
||||||
detail()
|
detail()
|
||||||
var gridPostData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로
|
var gridPostData = getSearchForJqgrid("cmd", "LIST"); //jqgrid에서는 object 로
|
||||||
@@ -90,6 +99,7 @@
|
|||||||
'API FULL PATH',
|
'API FULL PATH',
|
||||||
'요청',
|
'요청',
|
||||||
'응답',
|
'응답',
|
||||||
|
'상태',
|
||||||
'작성자',
|
'작성자',
|
||||||
'가상응답여부',
|
'가상응답여부',
|
||||||
'변경일시(*)',
|
'변경일시(*)',
|
||||||
@@ -99,11 +109,12 @@
|
|||||||
{name: 'eaiSvcName', align: 'left', width: '100', sortable: true},
|
{name: 'eaiSvcName', align: 'left', width: '100', sortable: true},
|
||||||
{name: 'eaiSvcDesc', align: 'left', sortable: false},
|
{name: 'eaiSvcDesc', align: 'left', sortable: false},
|
||||||
{name: 'apiFullPath', align: 'left', sortable: false},
|
{name: 'apiFullPath', align: 'left', sortable: false},
|
||||||
{name: 'fromAdapter', align: 'center', width: '40', formatter: adapterNameShortFormatter, sortable: false},
|
{name: 'fromAdapter', align: 'center', width: '30', formatter: adapterNameShortFormatter, sortable: false},
|
||||||
{name: 'toAdapter', align: 'center', width: '40', formatter: adapterNameShortFormatter, sortable: false},
|
{name: 'toAdapter', align: 'center', width: '30', formatter: adapterNameShortFormatter, sortable: false},
|
||||||
{name: 'author', align: 'center', width: '60', sortable: false},
|
{name: 'statusCode', align: 'center', width: '30', formatter: apiStatusFormatter, sortable: false},
|
||||||
|
{name: 'author', align: 'center', width: '40', sortable: false},
|
||||||
{name : 'simYn', align : 'center' , width:'40', hidden: true },
|
{name : 'simYn', align : 'center' , width:'40', hidden: true },
|
||||||
{name : 'lastModifiedDate', align : 'center' , width:'40', sortable: true},
|
{name : 'lastModifiedDate', align : 'center' , width:'60', sortable: true},
|
||||||
{name: 'syncAsyncType', align: 'center', width: '40', hidden: true},
|
{name: 'syncAsyncType', align: 'center', width: '40', hidden: true},
|
||||||
],
|
],
|
||||||
jsonReader: {
|
jsonReader: {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.eactive.eai.data.entity.onl.message.QServiceMessageEntity;
|
|||||||
import com.eactive.eai.data.entity.onl.routing.QRouting;
|
import com.eactive.eai.data.entity.onl.routing.QRouting;
|
||||||
import com.eactive.eai.data.entity.onl.stdmessage.QStandardMessageInfo;
|
import com.eactive.eai.data.entity.onl.stdmessage.QStandardMessageInfo;
|
||||||
import com.eactive.eai.data.jpa.AbstractDataService;
|
import com.eactive.eai.data.jpa.AbstractDataService;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.djb.apistatus.QApiStatus;
|
||||||
import com.eactive.eai.rms.data.entity.onl.authserver.QScopeInfo;
|
import com.eactive.eai.rms.data.entity.onl.authserver.QScopeInfo;
|
||||||
import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessService;
|
import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessService;
|
||||||
import com.querydsl.core.BooleanBuilder;
|
import com.querydsl.core.BooleanBuilder;
|
||||||
@@ -45,26 +46,28 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
|
|||||||
QServiceMessageEntity qServiceMessageEntity = QServiceMessageEntity.serviceMessageEntity;
|
QServiceMessageEntity qServiceMessageEntity = QServiceMessageEntity.serviceMessageEntity;
|
||||||
QRouting qRouting = QRouting.routing;
|
QRouting qRouting = QRouting.routing;
|
||||||
QStandardMessageInfo qStdInfo = QStandardMessageInfo.standardMessageInfo;
|
QStandardMessageInfo qStdInfo = QStandardMessageInfo.standardMessageInfo;
|
||||||
|
QApiStatus qApiStatus = QApiStatus.apiStatus;
|
||||||
|
|
||||||
JPAQuery<Tuple> jpaQuery = createBaseQuery(eaiMessageUISearch);
|
JPAQuery<Tuple> jpaQuery = createBaseQuery(eaiMessageUISearch);
|
||||||
|
|
||||||
long totalCount = jpaQuery.select(QEAIMessageEntity.eAIMessageEntity.count()).fetchOne();
|
long totalCount = jpaQuery.select(QEAIMessageEntity.eAIMessageEntity.count()).fetchOne();
|
||||||
|
|
||||||
// 정렬 조건 설정
|
// 정렬 조건 설정
|
||||||
OrderSpecifier<?> orderSpecifier = getOrderSpecifier(qeaiMessageEntity, sortname, sortorder);
|
OrderSpecifier<?> orderSpecifier = getOrderSpecifier(qeaiMessageEntity, sortname, sortorder);
|
||||||
|
|
||||||
List<Tuple> eaiMessages = jpaQuery
|
List<Tuple> eaiMessages = jpaQuery
|
||||||
.select(qeaiMessageEntity
|
.select(qeaiMessageEntity
|
||||||
, qServiceMessageEntity.psvintfacdsticname
|
, qServiceMessageEntity.psvintfacdsticname
|
||||||
, qServiceMessageEntity.psvsysadptrbzwkgroupname
|
, qServiceMessageEntity.psvsysadptrbzwkgroupname
|
||||||
, qRouting.nonmotivrouturiname
|
, qRouting.nonmotivrouturiname
|
||||||
, qStdInfo.apifullpath
|
, qStdInfo.apifullpath
|
||||||
, qStdInfo.bzwksvckeyname
|
, qStdInfo.bzwksvckeyname
|
||||||
|
, qApiStatus.statusCode
|
||||||
|
|
||||||
)
|
)
|
||||||
.limit(pageable.getPageSize())
|
.limit(pageable.getPageSize())
|
||||||
.offset(pageable.getOffset())
|
.offset(pageable.getOffset())
|
||||||
.orderBy(orderSpecifier)
|
.orderBy(orderSpecifier)
|
||||||
.fetch();
|
.fetch();
|
||||||
|
|
||||||
return new PageImpl<>(eaiMessages, pageable, totalCount);
|
return new PageImpl<>(eaiMessages, pageable, totalCount);
|
||||||
@@ -105,6 +108,7 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
|
|||||||
QServiceMessageEntity qServiceMessageEntity = QServiceMessageEntity.serviceMessageEntity;
|
QServiceMessageEntity qServiceMessageEntity = QServiceMessageEntity.serviceMessageEntity;
|
||||||
QRouting qRouting = QRouting.routing;
|
QRouting qRouting = QRouting.routing;
|
||||||
QStandardMessageInfo qStdInfo = QStandardMessageInfo.standardMessageInfo;
|
QStandardMessageInfo qStdInfo = QStandardMessageInfo.standardMessageInfo;
|
||||||
|
QApiStatus qApiStatus = QApiStatus.apiStatus;
|
||||||
|
|
||||||
BooleanBuilder predicate = createSelectListPredicate(eaiMessageUISearch);
|
BooleanBuilder predicate = createSelectListPredicate(eaiMessageUISearch);
|
||||||
|
|
||||||
@@ -114,6 +118,7 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
|
|||||||
, qRouting.nonmotivrouturiname
|
, qRouting.nonmotivrouturiname
|
||||||
, qStdInfo.apifullpath
|
, qStdInfo.apifullpath
|
||||||
, qStdInfo.bzwksvckeyname
|
, qStdInfo.bzwksvckeyname
|
||||||
|
, qApiStatus.statusCode
|
||||||
)
|
)
|
||||||
.from(qeaiMessageEntity)
|
.from(qeaiMessageEntity)
|
||||||
.join(qRouting)
|
.join(qRouting)
|
||||||
@@ -122,6 +127,8 @@ public class EAIMessageService extends AbstractDataService<EAIMessageEntity, Str
|
|||||||
.on(qServiceMessageEntity.id.svcprcssno.eq(1))
|
.on(qServiceMessageEntity.id.svcprcssno.eq(1))
|
||||||
.leftJoin(qStdInfo)
|
.leftJoin(qStdInfo)
|
||||||
.on(qeaiMessageEntity.eaisvcname.eq(qStdInfo.eaisvcname))
|
.on(qeaiMessageEntity.eaisvcname.eq(qStdInfo.eaisvcname))
|
||||||
|
.leftJoin(qApiStatus)
|
||||||
|
.on(qeaiMessageEntity.eaisvcname.eq(qApiStatus.eaisvcname))
|
||||||
.where(predicate);
|
.where(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ public interface ApiStatusRepository extends BaseRepository<ApiStatus, String> {
|
|||||||
+ " FROM ("
|
+ " FROM ("
|
||||||
+ " SELECT EAISVCNAME"
|
+ " SELECT EAISVCNAME"
|
||||||
+ " , STATUS_CODE AS PREV_STATUS_CODE "
|
+ " , STATUS_CODE AS PREV_STATUS_CODE "
|
||||||
+ " , CASE WHEN STATUS_CODE != 'C' AND CTRL_YN = 'Y' THEN 'CONTROL_START'"
|
+ " , CASE WHEN COUNT = 0 THEN 'STAY' "
|
||||||
|
+ " WHEN STATUS_CODE != 'C' AND CTRL_YN = 'Y' THEN 'CONTROL_START'"
|
||||||
+ " WHEN STATUS_CODE = 'C' AND CTRL_YN = 'N' THEN 'CONTROL_END'"
|
+ " WHEN STATUS_CODE = 'C' AND CTRL_YN = 'N' THEN 'CONTROL_END'"
|
||||||
+ " WHEN STATUS_CODE IN ('N','D') AND ERR_YN = 'Y' THEN 'ERROR_START'"
|
+ " WHEN STATUS_CODE IN ('N','D') AND ERR_YN = 'Y' THEN 'ERROR_START'"
|
||||||
+ " WHEN STATUS_CODE = 'E' AND ERR_YN = 'N' THEN 'ERROR_END'"
|
+ " WHEN STATUS_CODE = 'E' AND ERR_YN = 'N' THEN 'ERROR_END'"
|
||||||
@@ -39,6 +40,10 @@ public interface ApiStatusRepository extends BaseRepository<ApiStatus, String> {
|
|||||||
+ " FROM ("
|
+ " FROM ("
|
||||||
+ " SELECT A.EAISVCNAME"
|
+ " SELECT A.EAISVCNAME"
|
||||||
+ " , NVL(B.STATUS_CODE, 'N') AS STATUS_CODE"
|
+ " , NVL(B.STATUS_CODE, 'N') AS STATUS_CODE"
|
||||||
|
+ " , (SELECT COUNT(API_NAME) FROM API_STATS_MINUTE WHERE A.EAISVCNAME = API_NAME"
|
||||||
|
+ " AND TO_CHAR(STAT_TIME,'YYYYMMDDHH24MI')"
|
||||||
|
+ " BETWEEN TO_CHAR(SYSDATE - NUMTODSINTERVAL(30,'MINUTE'),'YYYYMMDDHH24MI')"
|
||||||
|
+ " AND TO_CHAR(SYSDATE,'YYYYMMDDHH24MI')) AS COUNT "
|
||||||
+ " , NVL(( SELECT MAX('Y') FROM EMSAPP.DJB_APISTATUS_INCIDENT_API X"
|
+ " , NVL(( SELECT MAX('Y') FROM EMSAPP.DJB_APISTATUS_INCIDENT_API X"
|
||||||
+ " WHERE EXISTS (SELECT 1 FROM EMSAPP.DJB_APISTATUS_INCIDENT Y WHERE X.INCIDENT_ID = Y.INCIDENT_ID "
|
+ " WHERE EXISTS (SELECT 1 FROM EMSAPP.DJB_APISTATUS_INCIDENT Y WHERE X.INCIDENT_ID = Y.INCIDENT_ID "
|
||||||
+ " AND SYSTIMESTAMP BETWEEN STARTED_AT AND END_AT) "
|
+ " AND SYSTIMESTAMP BETWEEN STARTED_AT AND END_AT) "
|
||||||
@@ -46,7 +51,7 @@ public interface ApiStatusRepository extends BaseRepository<ApiStatus, String> {
|
|||||||
+ " , (SELECT CASE WHEN TOTAL = 0 THEN 'X'"
|
+ " , (SELECT CASE WHEN TOTAL = 0 THEN 'X'"
|
||||||
+ " WHEN (TOTAL - SUCCESS) * 100 / TOTAL > :errorRate THEN 'Y'"
|
+ " WHEN (TOTAL - SUCCESS) * 100 / TOTAL > :errorRate THEN 'Y'"
|
||||||
+ " ELSE 'N' END"
|
+ " ELSE 'N' END"
|
||||||
+ " FROM (SELECT SUM(SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT) AS TOTAL"
|
+ " FROM (SELECT NVL(SUM(SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT),0) AS TOTAL"
|
||||||
+ " , SUM(SUCCESS_CNT) AS SUCCESS"
|
+ " , SUM(SUCCESS_CNT) AS SUCCESS"
|
||||||
+ " FROM API_STATS_MINUTE"
|
+ " FROM API_STATS_MINUTE"
|
||||||
+ " WHERE A.EAISVCNAME = API_NAME"
|
+ " WHERE A.EAISVCNAME = API_NAME"
|
||||||
@@ -56,7 +61,7 @@ public interface ApiStatusRepository extends BaseRepository<ApiStatus, String> {
|
|||||||
+ " , (SELECT CASE WHEN TOTAL = 0 THEN 'X'"
|
+ " , (SELECT CASE WHEN TOTAL = 0 THEN 'X'"
|
||||||
+ " WHEN RESP_SUM / TOTAL > :delayAvgRespTime THEN 'Y'"
|
+ " WHEN RESP_SUM / TOTAL > :delayAvgRespTime THEN 'Y'"
|
||||||
+ " ELSE 'N' END"
|
+ " ELSE 'N' END"
|
||||||
+ " FROM (SELECT SUM(SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT) AS TOTAL"
|
+ " FROM (SELECT NVL(SUM(SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT),0) AS TOTAL"
|
||||||
+ " , SUM(SUCCESS_CNT) AS SUCCESS"
|
+ " , SUM(SUCCESS_CNT) AS SUCCESS"
|
||||||
+ " , SUM((SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT) * AVG_RESP_TIME) AS RESP_SUM"
|
+ " , SUM((SUCCESS_CNT + TIMEOUT_CNT + SYSTEM_ERR_CNT + BIZ_ERR_CNT) * AVG_RESP_TIME) AS RESP_SUM"
|
||||||
+ " FROM API_STATS_MINUTE"
|
+ " FROM API_STATS_MINUTE"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.eactive.eai.data.entity.onl.message.ServiceMessageEntityId;
|
|||||||
import com.eactive.eai.data.entity.onl.messagekey.MessageKey;
|
import com.eactive.eai.data.entity.onl.messagekey.MessageKey;
|
||||||
import com.eactive.eai.data.entity.onl.stdmessage.QStandardMessageInfo;
|
import com.eactive.eai.data.entity.onl.stdmessage.QStandardMessageInfo;
|
||||||
import com.eactive.eai.data.entity.onl.stdmessage.StandardMessageInfo;
|
import com.eactive.eai.data.entity.onl.stdmessage.StandardMessageInfo;
|
||||||
|
import com.eactive.eai.rms.data.entity.onl.djb.apistatus.QApiStatus;
|
||||||
import com.eactive.eai.rms.common.base.OnlBaseService;
|
import com.eactive.eai.rms.common.base.OnlBaseService;
|
||||||
import com.eactive.eai.rms.common.combo.ComboService;
|
import com.eactive.eai.rms.common.combo.ComboService;
|
||||||
import com.eactive.eai.rms.common.combo.ComboVo;
|
import com.eactive.eai.rms.common.combo.ComboVo;
|
||||||
@@ -140,6 +141,7 @@ public class ApiInterfaceService extends OnlBaseService {
|
|||||||
|
|
||||||
String apiFullPath = tuple.get(QStandardMessageInfo.standardMessageInfo.apifullpath);
|
String apiFullPath = tuple.get(QStandardMessageInfo.standardMessageInfo.apifullpath);
|
||||||
String bzwksvckeyname = tuple.get(QStandardMessageInfo.standardMessageInfo.bzwksvckeyname);
|
String bzwksvckeyname = tuple.get(QStandardMessageInfo.standardMessageInfo.bzwksvckeyname);
|
||||||
|
String statusCode = tuple.get(QApiStatus.apiStatus.statusCode);
|
||||||
|
|
||||||
ApiInterfaceUI apiInterfaceUI;
|
ApiInterfaceUI apiInterfaceUI;
|
||||||
if (eaiMessageEntity.getServiceMessages() != null && eaiMessageEntity.getServiceMessages().size() > 0) {
|
if (eaiMessageEntity.getServiceMessages() != null && eaiMessageEntity.getServiceMessages().size() > 0) {
|
||||||
@@ -147,10 +149,11 @@ public class ApiInterfaceService extends OnlBaseService {
|
|||||||
} else {
|
} else {
|
||||||
apiInterfaceUI = apiInterfaceUIMapper.toVo(eaiMessageEntity);
|
apiInterfaceUI = apiInterfaceUIMapper.toVo(eaiMessageEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
apiInterfaceUI.setApiFullPath(apiFullPath);
|
apiInterfaceUI.setApiFullPath(apiFullPath);
|
||||||
apiInterfaceUI.setBzwksvckeyname(bzwksvckeyname);
|
apiInterfaceUI.setBzwksvckeyname(bzwksvckeyname);
|
||||||
|
apiInterfaceUI.setStatusCode(statusCode);
|
||||||
|
|
||||||
return apiInterfaceUI;
|
return apiInterfaceUI;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ public class ApiInterfaceUI {
|
|||||||
|
|
||||||
private String apiFullPath;
|
private String apiFullPath;
|
||||||
private String bzwksvckeyname;
|
private String bzwksvckeyname;
|
||||||
|
private String statusCode;
|
||||||
|
|
||||||
//ASYNC-SYNC 용
|
//ASYNC-SYNC 용
|
||||||
private String inboundResponseHttpMethod;
|
private String inboundResponseHttpMethod;
|
||||||
|
|||||||
Reference in New Issue
Block a user