zioinfo-mail/zioinfo/js/ajax.js
DESKTOP-TKLFCPR\ython e228faabf5 feat(itsm): G-1~G-12 확장 기능 + 하네스/봇/설치스크립트 구현
G-1: 메신저 Webhook Relay + _send_to_room 실제 httpx 호출 구현
G-2: POST /api/tasks/bulk SR 대량작업 엔드포인트 (최대 100건)
G-3: 라이선스 만료 알림 스케줄러 (매일 09:00 KST)
G-4: 체험판 upgrade_banner 필드 + license.py 배너 로직
G-5: core/auto_rca.py + incidents/problem auto-rca 엔드포인트
G-6: core/deploy_impact.py + vibe impact-analysis 엔드포인트
G-7: core/ticket_classifier.py + SR 생성 시 AI 분류 + ai-suggestion API
G-8: VulnPatchRecord 모델 + vuln_scan 패치추적 4개 엔드포인트
G-9: core/jira_sync.py + gateway Jira/Confluence 연동 엔드포인트
G-10: core/push_notify.py + routers/push.py + PushSubscription 모델
G-11: approvals 다중승인 (위임/서명/기한초과/마감연장)
G-12: alembic.ini + migrations/ + cicd/migrate_to_postgres.sh

하네스: guardia-orchestrator 확장기능 Phase 반영
봇명령어: /sr /status /license /bulk 슬래시 명령어 추가
설치스크립트: setup/ (Ubuntu, CentOS, RHEL, Windows) --test 옵션 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 18:18:52 +09:00

184 lines
3.7 KiB
JavaScript

/*------------------------------------------------------------------------------
* 1. 파일명: ajax.js
* 2. 설 명: AJAX를 이용한 처리와 관련된 함수를 정의한다.
* 3. 의존성:
* 4. 작성자:
* 5. 작성일: 2006.12.15.
-----------------------------------------------------------------------------*/
/**
* XMLHttpRequest를 통해 처리를 요청한다.
* 처리는 sync. 하게 일어나도록 한다.
*/
function send(url) {
var res = null;
/* XMLHttpRequest를 얻는다. */
var xmlHttp = getXMLHttpRequest();
if ( xmlHttp != null ) {
xmlHttp.open("GET", url, false); // 동기로 호출.
xmlHttp.send(null);
res = eval("(" + xmlHttp.responseText + ")");
}
/* 사용한 XMLHttpRequest를 돌려준다. */
returnXMLHttpRequest(xmlHttp);
return res;
}
/**
* XMLHttpRequest를 이용하여 POST 방식으로 처리를 요청한다.
* 처리는 sync. 하게 일어난다.
*/
function sendForm(form) {
var res = null;
var url = form.action;
var xmlHttp = getXMLHttpRequest();
if ( xmlHttp != null ) {
xmlHttp.open("POST", url, false); // 동기로 호출.
/* POST로 정보를 보내기 전에 Content-Type 값을 설정한다. */
var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
xmlHttp.setRequestHeader("Content-Type", contentType);
/* POST로 보낼 데이타를 생성한다. */
var postData = makePostData(form);
xmlHttp.send(postData);
res = eval("(" + xmlHttp.responseText + ")");
}
/* 사용한 XMLHttpRequest를 돌려준다. */
returnXMLHttpRequest(xmlHttp);
return res;
}
/**
* 주어진 Form에 있는 정보를 POST 로 실어 보낼
* 자료 형식으로 만들어 돌려 준다.
*/
function makePostData(form) {
var data = "";
var length = form.elements.length;
for ( var i = 0; i < length; i++ ) {
if ( i > 0 ) data += "&";
var elem = form.elements[i];
/* Disabled 된 항목은 보내지 않는다. */
if ( elem.disabled ) continue;
/* 자료형태가 radio나 checkbox인 경우는 check된 항목의 값만 보낸다.
value 항목이 정의되어 있지 않으면 true를 보낸다. */
if ( ( elem.type == "radio" || elem.type == "checkbox" )
&& elem.checked ) {
data += elem.name + "=" + ( isEmpty(elem.value) ? "true" : encodeURIComponent(elem.value) );
}
else {
/* type이 text나 select-single 인 경우. select-multi 인 경우는 일단 고려 안 한다. */
data += elem.name + "=" + encodeURIComponent(elem.value);
}
}
return data;
}
/**
* XMLHttpRequest 객체를 돌려 준다.
* 이미 생성되어 사용중이지 않은 게 있으면 이를 주고
* 사용중이 아닌 게 없으면 만들어 돌려 준다.
*/
var httpReqStack = new Array();
function getXMLHttpRequest() {
var httpReq = null;
if ( httpReqStack.length > 0 ) {
httpReq = httpReqStack.pop();
}
else {
httpReq = newXMLHttpRequest();
}
return httpReq;
}
/**
* 이미 사용한 XMLHttpRequest를 돌려받는다.
*/
function returnXMLHttpRequest(httpReq) {
httpReqStack.push(httpReq);
}
/**
* 브라우저의 종류에 맞게 XMLHttpRequest 객체를 생성하여
* 돌려 준다.
*/
function newXMLHttpRequest() {
var reqHttp;
if ( window.ActiveXObject ) { // IE
try {
reqHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
reqHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e1) {
reqHttp = null;
}
}
}
else if ( window.XMLHttpRequest ) { // IE 이외
try {
reqHttp = new XMLHttpRequest();
}
catch (e) {
}
}
if ( reqHttp == null ) {
alert("XMLHttpRequest 객체를 생성하는데 실패하였습니다.");
}
return reqHttp;
}
function deleteAllRow(obj) {
var childCount = obj.childNodes.length;
for ( var i = (childCount - 1); i >= 0; i-- ) {
obj.deleteRow(i);
}
}
function makeTableRow(dataArray) {
var rowObj = document.createElement("tr");
for ( var i = 0; i < dataArray.length; i++ ) {
var dataObj = document.createElement("td");
dataObj.innerHTML = dataArray[i];
rowObj.appendChild(dataObj);
}
return rowObj;
}