This commit is contained in:
2025-10-13 22:08:53 +09:00
parent c1fd11c094
commit 90c242e46b
5 changed files with 298 additions and 48 deletions

View File

@@ -1,9 +1,10 @@
from __future__ import annotations
import logging
import unicodedata
from pathlib import Path
from flask import Blueprint, render_template, request, redirect, url_for, flash
from flask_login import login_required
from werkzeug.utils import secure_filename
from config import Config
xml_bp = Blueprint("xml", __name__)
@@ -17,12 +18,26 @@ def allowed_file(filename: str) -> bool:
return "." in filename and filename.rsplit(".", 1)[1].lower() in Config.ALLOWED_EXTENSIONS
def sanitize_preserve_unicode(filename: str) -> str:
"""
디렉터리 탐색/제어 문자를 차단하면서, 한글/유니코드 파일명은 그대로 보존합니다.
- 경로 요소 제거 (Path(...).name)
- 유니코드 정규화(NFC)로 OS간 차이 최소화
- 널문자/슬래시/역슬래시 차단
"""
name = Path(filename).name
name = unicodedata.normalize("NFC", name)
if not name or any(ch in name for ch in ["\x00", "/", "\\"]):
raise ValueError("잘못된 파일명입니다.")
return name
@xml_bp.route("/xml_management")
@login_required
def xml_management():
xml_dir = Path(Config.XML_FOLDER)
try:
files = [f.name for f in xml_dir.iterdir() if f.is_file()]
files = sorted([f.name for f in xml_dir.iterdir() if f.is_file()])
except FileNotFoundError:
files = []
flash("XML 폴더가 존재하지 않습니다.", "danger")
@@ -37,58 +52,83 @@ def upload_xml():
flash("업로드할 파일을 선택하세요.", "warning")
return redirect(url_for("xml.xml_management"))
if allowed_file(file.filename):
filename = secure_filename(file.filename)
save_path = Path(Config.XML_FOLDER) / filename
try:
save_path.parent.mkdir(parents=True, exist_ok=True)
file.save(str(save_path))
# 텍스트 파일이므로 0644 권장
try:
save_path.chmod(0o644)
except Exception:
pass # Windows 등에서 무시
logging.info(f"XML 업로드됨: {filename}")
flash("파일이 성공적으로 업로드되었습니다.", "success")
except Exception as e:
logging.error(f"파일 업로드 오류: {e}")
flash("파일 저장 중 오류가 발생했습니다.", "danger")
else:
if not allowed_file(file.filename):
flash("XML 확장자만 업로드할 수 있습니다.", "warning")
return redirect(url_for("xml.xml_management"))
try:
filename = sanitize_preserve_unicode(file.filename) # 한글/유니코드 보존
except ValueError:
flash("파일명이 올바르지 않습니다.", "danger")
return redirect(url_for("xml.xml_management"))
save_path = Path(Config.XML_FOLDER) / filename
try:
save_path.parent.mkdir(parents=True, exist_ok=True)
file.save(str(save_path))
# 텍스트 파일 권장 권한 (Windows에서는 무시될 수 있음)
try:
save_path.chmod(0o644)
except Exception:
pass
logging.info(f"XML 업로드됨: {filename}")
flash("파일이 성공적으로 업로드되었습니다.", "success")
except Exception as e:
logging.error(f"파일 업로드 오류: {e}")
flash("파일 저장 중 오류가 발생했습니다.", "danger")
return redirect(url_for("xml.xml_management"))
@xml_bp.route("/delete_xml/<filename>", methods=["POST"])
@xml_bp.route("/delete_xml/<path:filename>", methods=["POST"])
@login_required
def delete_xml(filename: str):
path = Path(Config.XML_FOLDER) / secure_filename(filename)
if path.exists():
try:
path.unlink()
flash(f"{filename} 파일이 삭제되었습니다.", "success")
logging.info(f"XML 삭제됨: {filename}")
except Exception as e:
logging.error(f"XML 삭제 오류: {e}")
flash("파일 삭제 중 오류 발생", "danger")
else:
try:
safe_name = sanitize_preserve_unicode(filename)
except ValueError:
flash("잘못된 파일명입니다.", "danger")
return redirect(url_for("xml.xml_management"))
path = Path(Config.XML_FOLDER) / safe_name
if not path.exists():
flash("해당 파일이 존재하지 않습니다.", "warning")
return redirect(url_for("xml.xml_management"))
try:
path.unlink()
flash(f"{safe_name} 파일이 삭제되었습니다.", "success")
logging.info(f"XML 삭제됨: {safe_name}")
except Exception as e:
logging.error(f"XML 삭제 오류: {e}")
flash("파일 삭제 중 오류 발생", "danger")
return redirect(url_for("xml.xml_management"))
@xml_bp.route("/edit_xml/<filename>", methods=["GET", "POST"])
@xml_bp.route("/edit_xml/<path:filename>", methods=["GET", "POST"])
@login_required
def edit_xml(filename: str):
path = Path(Config.XML_FOLDER) / secure_filename(filename)
try:
safe_name = sanitize_preserve_unicode(filename)
except ValueError:
flash("잘못된 파일명입니다.", "danger")
return redirect(url_for("xml.xml_management"))
path = Path(Config.XML_FOLDER) / safe_name
if not path.exists():
flash("파일을 찾을 수 없습니다.", "danger")
return redirect(url_for("xml.xml_management"))
if request.method == "POST":
new_content = request.form.get("content", "")
raw = request.form.get("content", "")
# 1) 개행 통일: CRLF/CR → LF
normalized = raw.replace("\r\n", "\n").replace("\r", "\n")
try:
path.write_text(new_content, encoding="utf-8")
logging.info(f"XML 수정됨: {filename}")
# 2) 항상 LF로 저장 (Windows에서도 강제)
path.write_text(normalized, encoding="utf-8", newline="\n")
logging.info(f"XML 수정됨: {safe_name}")
flash("파일이 성공적으로 수정되었습니다.", "success")
return redirect(url_for("xml.xml_management"))
except Exception as e:
@@ -96,10 +136,11 @@ def edit_xml(filename: str):
flash("파일 저장 중 오류가 발생했습니다.", "danger")
try:
content = path.read_text(encoding="utf-8")
# 보기/편집 일관성을 위해 읽을 때도 LF로 맞춰서 textarea에 넣음
content = path.read_text(encoding="utf-8").replace("\r\n", "\n").replace("\r", "\n")
except Exception as e:
logging.error(f"XML 열기 실패: {e}")
flash("파일 열기 중 오류가 발생했습니다.", "danger")
content = ""
return render_template("edit_xml.html", filename=filename, content=content)
return render_template("edit_xml.html", filename=safe_name, content=content)

14
data/logs/2025-10-05.log Normal file
View File

@@ -0,0 +1,14 @@
2025-10-05 16:53:13,743 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-05 16:53:13,777 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:13,777 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:13,899 [INFO] werkzeug: WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://58.234.69.208:5000
2025-10-05 16:53:13,899 [INFO] werkzeug: Press CTRL+C to quit
2025-10-05 16:53:13,900 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-05 16:53:14,797 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-05 16:53:14,818 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:14,818 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:14,839 [WARNING] werkzeug: * Debugger is active!
2025-10-05 16:53:14,841 [INFO] werkzeug: * Debugger PIN: 141-667-586

View File

@@ -1,14 +1,209 @@
2025-10-05 16:53:13,743 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-05 16:53:13,777 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:13,777 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:13,899 [INFO] werkzeug: WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2025-10-13 20:46:24,878 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 20:46:24,903 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:24,903 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:25,012 [INFO] werkzeug: WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://58.234.69.208:5000
2025-10-05 16:53:13,899 [INFO] werkzeug: Press CTRL+C to quit
2025-10-05 16:53:13,900 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-05 16:53:14,797 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-05 16:53:14,818 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:14,818 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-05 16:53:14,839 [WARNING] werkzeug: * Debugger is active!
2025-10-05 16:53:14,841 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 20:46:25,013 [INFO] werkzeug: Press CTRL+C to quit
2025-10-13 20:46:25,016 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 20:46:25,793 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 20:46:25,812 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:25,812 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:25,832 [WARNING] werkzeug: * Debugger is active!
2025-10-13 20:46:25,834 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 20:46:33,645 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:33] "GET / HTTP/1.1" 302 -
2025-10-13 20:46:33,681 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:33] "GET /login?next=/ HTTP/1.1" 200 -
2025-10-13 20:46:33,726 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:33] "GET /static/style.css HTTP/1.1" 200 -
2025-10-13 20:46:33,761 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:33] "GET /static/favicon.ico HTTP/1.1" 200 -
2025-10-13 20:46:43,092 [INFO] app: LOGIN: form ok email=ganghee@zespro.co.kr
2025-10-13 20:46:43,092 [INFO] app: LOGIN: form ok email=ganghee@zespro.co.kr
2025-10-13 20:46:43,164 [INFO] app: LOGIN: found id=1 active=True pass_ok=True
2025-10-13 20:46:43,164 [INFO] app: LOGIN: found id=1 active=True pass_ok=True
2025-10-13 20:46:43,165 [INFO] app: LOGIN: SUCCESS → redirect
2025-10-13 20:46:43,165 [INFO] app: LOGIN: SUCCESS → redirect
2025-10-13 20:46:43,166 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:43] "POST /login HTTP/1.1" 302 -
2025-10-13 20:46:43,208 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:43] "GET /index HTTP/1.1" 200 -
2025-10-13 20:46:43,228 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:43] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 20:46:43,239 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:43] "GET /static/script.js HTTP/1.1" 200 -
2025-10-13 20:46:43,700 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\auth.py', reloading
2025-10-13 20:46:43,960 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 20:46:44,783 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 20:46:44,806 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:44,806 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 20:46:44,830 [WARNING] werkzeug: * Debugger is active!
2025-10-13 20:46:44,831 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 20:46:50,381 [INFO] root: file_view: folder=idrac_info date= filename=1PYCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\1PYCZC4.txt
2025-10-13 20:46:50,381 [INFO] root: file_view: folder=idrac_info date= filename=1PYCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\1PYCZC4.txt
2025-10-13 20:46:50,390 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:50] "GET /view_file?folder=idrac_info&filename=1PYCZC4.txt HTTP/1.1" 200 -
2025-10-13 20:46:50,391 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:50] "GET /view_file?folder=idrac_info&filename=1PYCZC4.txt HTTP/1.1" 200 -
2025-10-13 20:46:52,148 [INFO] root: file_view: folder=idrac_info date= filename=FWZCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\FWZCZC4.txt
2025-10-13 20:46:52,148 [INFO] root: file_view: folder=idrac_info date= filename=FWZCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\FWZCZC4.txt
2025-10-13 20:46:52,156 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:52] "GET /view_file?folder=idrac_info&filename=FWZCZC4.txt HTTP/1.1" 200 -
2025-10-13 20:46:52,156 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:46:52] "GET /view_file?folder=idrac_info&filename=FWZCZC4.txt HTTP/1.1" 200 -
2025-10-13 20:59:08,054 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:59:08] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 20:59:08,094 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:59:08] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 20:59:10,603 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:59:10] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 20:59:10,610 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:59:10] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 20:59:10,628 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 20:59:10] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:01:45,024 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\app.py', reloading
2025-10-13 21:01:45,025 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\auth.py', reloading
2025-10-13 21:01:45,025 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\utilities.py', reloading
2025-10-13 21:01:46,120 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 21:01:47,037 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 21:01:47,057 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:01:47,057 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:01:47,079 [WARNING] werkzeug: * Debugger is active!
2025-10-13 21:01:47,080 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 21:03:00,929 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:00] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:03:00,969 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:00] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:03:01,001 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /static/favicon.ico HTTP/1.1" 304 -
2025-10-13 21:03:01,726 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:03:01,741 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:03:01,762 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /static/favicon.ico HTTP/1.1" 304 -
2025-10-13 21:03:01,885 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:03:01,900 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:03:01,920 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:03:01] "GET /static/favicon.ico HTTP/1.1" 304 -
2025-10-13 21:27:00,213 [ERROR] werkzeug: 176.32.195.85 - - [13/Oct/2025 21:27:00] code 400, message Bad request version ("¯nãY»bhlÿ(=':©\x82ÙoÈ¢×\x93\x98´ï\x80å¹\x90\x00(À")
2025-10-13 21:27:00,214 [INFO] werkzeug: 176.32.195.85 - - [13/Oct/2025 21:27:00] "\x16\x03\x02\x01o\x01\x00\x01k\x03\x02RHÅ\x1a#÷:Nßâ´\x82/ÿ\x09T\x9f§Äy°hÆ\x13\x8c¤\x1c="á\x1a\x98 \x84´,\x85¯nãY»bhlÿ(=':©\x82ÙoÈ¢×\x93\x98´ï\x80å¹\x90\x00(À" 400 -
2025-10-13 21:53:20,275 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:20] "GET /xml_management HTTP/1.1" 302 -
2025-10-13 21:53:20,284 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:20] "GET /login?next=/xml_management HTTP/1.1" 200 -
2025-10-13 21:53:20,304 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:20] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:53:20,328 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:20] "GET /static/favicon.ico HTTP/1.1" 304 -
2025-10-13 21:53:32,213 [INFO] app: LOGIN: form ok email=ganghee@zespro.co.kr
2025-10-13 21:53:32,213 [INFO] app: LOGIN: form ok email=ganghee@zespro.co.kr
2025-10-13 21:53:32,262 [INFO] app: LOGIN: found id=1 active=True pass_ok=True
2025-10-13 21:53:32,262 [INFO] app: LOGIN: found id=1 active=True pass_ok=True
2025-10-13 21:53:32,263 [INFO] app: LOGIN: SUCCESS → redirect
2025-10-13 21:53:32,263 [INFO] app: LOGIN: SUCCESS → redirect
2025-10-13 21:53:32,264 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:32] "POST /login HTTP/1.1" 302 -
2025-10-13 21:53:32,284 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:32] "GET /index HTTP/1.1" 200 -
2025-10-13 21:53:32,305 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:32] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:53:32,306 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:32] "GET /static/script.js HTTP/1.1" 304 -
2025-10-13 21:53:32,776 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\auth.py', reloading
2025-10-13 21:53:33,286 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 21:53:34,214 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 21:53:34,238 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:53:34,238 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:53:34,264 [WARNING] werkzeug: * Debugger is active!
2025-10-13 21:53:34,266 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 21:53:34,514 [INFO] root: file_view: folder=idrac_info date= filename=1PYCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\1PYCZC4.txt
2025-10-13 21:53:34,514 [INFO] root: file_view: folder=idrac_info date= filename=1PYCZC4.txt | base=D:\Code\iDRAC_Info\idrac_info\data\idrac_info | target=D:\Code\iDRAC_Info\idrac_info\data\idrac_info\1PYCZC4.txt
2025-10-13 21:53:34,515 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:34] "GET /view_file?folder=idrac_info&filename=1PYCZC4.txt HTTP/1.1" 200 -
2025-10-13 21:53:34,517 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:53:34] "GET /view_file?folder=idrac_info&filename=1PYCZC4.txt HTTP/1.1" 200 -
2025-10-13 21:55:55,966 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:55] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:55:56,007 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:56] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:55:56,226 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:56] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:55:56,242 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:56] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:55:56,916 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:56] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 21:55:56,931 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:55:56] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:57:26,121 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\utilities.py', reloading
2025-10-13 21:57:26,773 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 21:57:27,733 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 21:57:27,754 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:27,754 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:27,776 [WARNING] werkzeug: * Debugger is active!
2025-10-13 21:57:27,778 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 21:57:38,241 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\file_view.py', reloading
2025-10-13 21:57:38,936 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 21:57:39,993 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 21:57:40,013 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:40,013 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:40,035 [WARNING] werkzeug: * Debugger is active!
2025-10-13 21:57:40,036 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 21:57:46,976 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\xml.py', reloading
2025-10-13 21:57:47,142 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 21:57:48,215 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 21:57:48,239 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:48,239 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 21:57:48,263 [WARNING] werkzeug: * Debugger is active!
2025-10-13 21:57:48,265 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 21:58:54,150 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:58:54] "GET /index HTTP/1.1" 200 -
2025-10-13 21:58:54,207 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:58:54] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 21:58:54,211 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 21:58:54] "GET /static/script.js HTTP/1.1" 304 -
2025-10-13 22:01:38,304 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\xml.py', reloading
2025-10-13 22:01:38,693 [INFO] werkzeug: * Restarting with watchdog (windowsapi)
2025-10-13 22:01:39,585 [INFO] root: Logger initialized | level=INFO | file=D:\Code\iDRAC_Info\idrac_info\data\logs\app.log
2025-10-13 22:01:39,606 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 22:01:39,606 [INFO] app: DB URI = sqlite:///D:/Code/iDRAC_Info/idrac_info/backend/instance/site.db
2025-10-13 22:01:39,629 [WARNING] werkzeug: * Debugger is active!
2025-10-13 22:01:39,631 [INFO] werkzeug: * Debugger PIN: 141-667-586
2025-10-13 22:01:41,777 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:41] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:01:41,820 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:41] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:01:43,249 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:43] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:01:43,266 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:43] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:01:52,082 [INFO] root: XML 수정됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:01:52,083 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:52] "POST /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:01:52,089 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:52] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:01:52,108 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:52] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:01:54,303 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:54] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:01:54,320 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:01:54] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:07,198 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:07] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:02:07,218 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:07] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:13,613 [INFO] root: XML 삭제됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:02:13,614 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:13] "POST /delete_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:02:13,620 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:13] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:02:13,655 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:13] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:34,242 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:34] "POST /upload_xml HTTP/1.1" 302 -
2025-10-13 22:02:34,248 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:34] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:02:34,265 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:34] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:40,425 [INFO] root: XML 업로드됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:02:40,426 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:40] "POST /upload_xml HTTP/1.1" 302 -
2025-10-13 22:02:40,431 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:40] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:02:40,451 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:40] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:49,269 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:49] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:02:49,286 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:49] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:58,452 [INFO] root: XML 수정됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:02:58,453 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:58] "POST /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:02:58,460 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:58] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:02:58,481 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:58] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:02:59,976 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:59] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:02:59,994 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:02:59] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:03,710 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:03] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:03,738 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:03] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:12,093 [INFO] root: XML 삭제됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:12,094 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:12] "POST /delete_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:03:12,100 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:12] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:12,117 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:12] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:16,786 [INFO] root: XML 업로드됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:16,787 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:16] "POST /upload_xml HTTP/1.1" 302 -
2025-10-13 22:03:16,792 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:16] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:16,810 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:16] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:18,824 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:18] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:03:18,842 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:18] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:20,517 [INFO] root: XML 수정됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:20,517 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:20] "POST /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:03:20,523 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:20] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:20,541 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:20] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:21,471 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:21] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:03:21,488 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:21] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:22,862 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:22] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:22,882 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:22] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:24,843 [INFO] root: XML 삭제됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:24,843 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:24] "POST /delete_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:03:24,850 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:24] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:24,867 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:24] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:29,647 [INFO] root: XML 업로드됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:29,648 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:29] "POST /upload_xml HTTP/1.1" 302 -
2025-10-13 22:03:29,653 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:29] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:29,671 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:29] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:32,324 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:32] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:03:32,342 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:32] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:41,018 [INFO] root: XML 수정됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:03:41,019 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:41] "POST /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:03:41,024 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:41] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:03:41,043 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:41] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:03:42,366 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:42] "GET /edit_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 200 -
2025-10-13 22:03:42,383 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:03:42] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:04:08,315 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:08] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:04:08,335 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:08] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:04:10,894 [INFO] root: XML 삭제됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:04:10,894 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:10] "POST /delete_xml/PO-20250826-0158%20_가산3_XE9680_384EA.xml HTTP/1.1" 302 -
2025-10-13 22:04:10,900 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:10] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:04:10,918 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:10] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:04:13,763 [INFO] root: XML 업로드됨: PO-20250826-0158 _가산3_XE9680_384EA.xml
2025-10-13 22:04:13,764 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:13] "POST /upload_xml HTTP/1.1" 302 -
2025-10-13 22:04:13,769 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:13] "GET /xml_management HTTP/1.1" 200 -
2025-10-13 22:04:13,787 [INFO] werkzeug: 127.0.0.1 - - [13/Oct/2025 22:04:13] "GET /static/style.css HTTP/1.1" 304 -
2025-10-13 22:06:39,759 [INFO] werkzeug: * Detected change in 'D:\\Code\\iDRAC_Info\\idrac_info\\backend\\routes\\xml.py', reloading
2025-10-13 22:06:40,155 [INFO] werkzeug: * Restarting with watchdog (windowsapi)