jeongsoo commited on
Commit
c074b9a
·
1 Parent(s): 8a95904
Files changed (1) hide show
  1. app.py +56 -24
app.py CHANGED
@@ -7,7 +7,7 @@ import time
7
  # 전역 변수로 서버 URL 저장
8
  SERVER_URL = ""
9
  # 타임아웃 설정 (초)
10
- REQUEST_TIMEOUT = 30 # 15초에서 30초
11
 
12
  # 영구적인 HTTP 세션 생성
13
  session = requests.Session()
@@ -16,13 +16,13 @@ adapter = requests.adapters.HTTPAdapter(
16
  pool_connections=5,
17
  pool_maxsize=10,
18
  max_retries=requests.adapters.Retry(
19
- total=5, # 총 재시도 횟수
20
  backoff_factor=0.5, # 재시도 간 대기 시간 증가 계수
21
  status_forcelist=[429, 500, 502, 503, 504], # 재시도할 HTTP 상태 코드
22
  allowed_methods=["GET", "POST"], # 재시도할 HTTP 메서드
23
- connect=5, # 연결 오류에 대한 재시도 횟수
24
- read=5, # 읽기 오류에 대한 재시도 횟수
25
- redirect=5 # 리다이렉트 재시도 횟수
26
  )
27
  )
28
  session.mount('http://', adapter)
@@ -294,16 +294,13 @@ def get_programs():
294
  if not SERVER_URL:
295
  return "서버 URL이 설정되지 않았습니다. 먼저 서버에 연결하세요.", []
296
 
297
- # 디버그 정보 기록
298
- print(f"Fetching programs from {SERVER_URL}/api/programs - Timeout set to {REQUEST_TIMEOUT} seconds")
299
-
300
- # 로딩 메시지
301
- loading_html = "<div style='text-align: center; padding: 20px;'>"
302
- loading_html += f"<p>프로그램 목록을 불러오는 중입니다...</p>"
303
- loading_html += f"<p>이 작업은 최대 {REQUEST_TIMEOUT}초가 소요될 수 있습니다.</p>"
304
- loading_html += "</div>"
305
 
306
  try:
 
 
 
307
  # 헤더 추가
308
  headers = {
309
  "User-Agent": "LocalPCAgent-Client/1.0",
@@ -312,12 +309,39 @@ def get_programs():
312
  "Connection": "keep-alive"
313
  }
314
 
315
- # 요청 실행
316
- response = session.get(
317
- f"{SERVER_URL}/api/programs",
318
- headers=headers,
319
- timeout=REQUEST_TIMEOUT
320
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
321
 
322
  if response.status_code == 200:
323
  result_json = response.json()
@@ -576,16 +600,21 @@ with gr.Blocks(title="LocalPCAgent 제어 인터페이스") as demo:
576
  outputs=[device_info_result]
577
  )
578
 
579
- # 프로그램 실행 이벤트
580
  get_programs_btn.click(
581
  fn=get_programs,
582
  inputs=None,
583
  outputs=[programs_result, program_dropdown]
584
  )
585
 
586
- # 콘솔에 디버그 정보 기록 및 선택시 드롭다운 값 확인
587
  program_dropdown.change(
588
- fn=lambda x: print(f"Program selected: {x}") or ("<div style='padding: 15px; background-color: #d4edda; border-radius: 5px; border-left: 5px solid #28a745;'><p>프로그램 선택되었습니다. '프���그램 실행' 버튼을 클릭하세요.</p></div>" if x else ""),
 
 
 
 
 
589
  inputs=[program_dropdown],
590
  outputs=[execute_result]
591
  )
@@ -598,7 +627,10 @@ with gr.Blocks(title="LocalPCAgent 제어 인터페이스") as demo:
598
 
599
  # 앱 실행
600
  if __name__ == "__main__":
601
- print("Starting LocalPCAgent web interface...")
 
 
 
602
  # 디버그 모드로 실행하여 오류 추적이 쉽도록 함
603
  demo.launch(debug=True, show_error=True) # 디버그 모드로 문제 원인 파악을 용이하게 함
604
- print("Web interface closed.")
 
7
  # 전역 변수로 서버 URL 저장
8
  SERVER_URL = ""
9
  # 타임아웃 설정 (초)
10
+ REQUEST_TIMEOUT = 15 # 많은 시간으설정하면 오히려 프로세스 걸릴 수 있음
11
 
12
  # 영구적인 HTTP 세션 생성
13
  session = requests.Session()
 
16
  pool_connections=5,
17
  pool_maxsize=10,
18
  max_retries=requests.adapters.Retry(
19
+ total=3, # 총 재시도 횟수
20
  backoff_factor=0.5, # 재시도 간 대기 시간 증가 계수
21
  status_forcelist=[429, 500, 502, 503, 504], # 재시도할 HTTP 상태 코드
22
  allowed_methods=["GET", "POST"], # 재시도할 HTTP 메서드
23
+ connect=3, # 연결 오류에 대한 재시도 횟수
24
+ read=3, # 읽기 오류에 대한 재시도 횟수
25
+ redirect=3 # 리다이렉트 재시도 횟수
26
  )
27
  )
28
  session.mount('http://', adapter)
 
294
  if not SERVER_URL:
295
  return "서버 URL이 설정되지 않았습니다. 먼저 서버에 연결하세요.", []
296
 
297
+ # 디버그 정보 기록 - 여기서 모든 오류 상황을 축적해보자
298
+ print(f"[DEBUG] 시작: 프로그램 목록 조회 시도 - {SERVER_URL}/api/programs")
 
 
 
 
 
 
299
 
300
  try:
301
+ # 임시 테스트 - 응답을 시뮬레이션해보자
302
+ print(f"[DEBUG] 헤더 구성 및 요청 준비 중")
303
+
304
  # 헤더 추가
305
  headers = {
306
  "User-Agent": "LocalPCAgent-Client/1.0",
 
309
  "Connection": "keep-alive"
310
  }
311
 
312
+ # 드롭다운 배열 설정 오류 테스트
313
+ test_programs = [
314
+ {"id": "test1", "name": "테스트 프로그램 1", "description": "테스트 설명 1", "path": "C:\\test\\program1.exe"},
315
+ {"id": "test2", "name": "테스트 프로그램 2", "description": "테스트 설명 2", "path": "C:\\test\\program2.exe"}
316
+ ]
317
+
318
+ # 코드 실행 로깅
319
+ print(f"[DEBUG] 테스트 데이터 생성 완료")
320
+
321
+ # 프로그램 목록을 바로 만들기
322
+ program_options = []
323
+ for program in test_programs:
324
+ program_id = program.get("id", "")
325
+ program_name = program.get("name", "Unknown Program")
326
+ program_desc = program.get("description", "")
327
+ entry = (f"{program_name} - {program_desc}", program_id)
328
+ program_options.append(entry)
329
+ print(f"[DEBUG] 드롭다운 옵션 추가: {entry}")
330
+
331
+ # 디버그 정보 추가
332
+ print(f"[DEBUG] 프로그램 옵션 만들기 완료 - 개수: {len(program_options)}, 데이터: {program_options}")
333
+
334
+ # HTML 생성
335
+ html_output = "<div style='padding: 10px; background-color: #e6f7ff; border-radius: 5px;'>"
336
+ html_output += "<h4>테스트 용 프로그램 목록</h4>"
337
+ html_output += "<ul>"
338
+ for program in test_programs:
339
+ html_output += f"<li><strong>{program['name']}</strong> - {program['description']}</li>"
340
+ html_output += "</ul>"
341
+ html_output += "</div>"
342
+
343
+ print(f"[DEBUG] HTML 생성 완료, 결과 반환 준비 완료")
344
+ return html_output, program_options
345
 
346
  if response.status_code == 200:
347
  result_json = response.json()
 
600
  outputs=[device_info_result]
601
  )
602
 
603
+ # 프로그램 실행 이벤트 - Gradio 문제 테스트
604
  get_programs_btn.click(
605
  fn=get_programs,
606
  inputs=None,
607
  outputs=[programs_result, program_dropdown]
608
  )
609
 
610
+ # 드롭다운 값 변경 시 디버그 정보 출력
611
  program_dropdown.change(
612
+ fn=lambda x: print(f"[DEBUG] 프로그램 선택됨: {x}") or (
613
+ "<div style='padding: 15px; background-color: #d4edda; border-radius: 5px; border-left: 5px solid #28a745;'>"
614
+ f"<p>선택한 프로그램: {x}</p>"
615
+ "<p>'프로그램 실행' 버튼을 클릭하세요.</p>"
616
+ "</div>" if x else ""
617
+ ),
618
  inputs=[program_dropdown],
619
  outputs=[execute_result]
620
  )
 
627
 
628
  # 앱 실행
629
  if __name__ == "__main__":
630
+ print("=== LocalPCAgent 인터페이스 시작 ===\n")
631
+ print("* 다양한 오류 디버깅을 위해 로그를 자세히 출력합니다.")
632
+ print("* 구현된 테스트 기능을 통해 드롭다운 작동 여부를 확인합니다.\n")
633
+
634
  # 디버그 모드로 실행하여 오류 추적이 쉽도록 함
635
  demo.launch(debug=True, show_error=True) # 디버그 모드로 문제 원인 파악을 용이하게 함
636
+ print("\n=== 인터페이스 종료 ===")