feat: 대시보드 데이터 파싱 로직 고도화 및 크롤링 서비스 개선
- 대시보드: 8컬럼 형식의 sheet.csv를 안정적으로 지원하도록 파싱 로직 개선 - 크롤러: Playwright 기반 크롤링 엔진 고도화 및 실시간 로그 전송 기능 강화 - UI/UX: 대시보드 동기화 버튼 및 헤더 레이아웃 최적화
This commit is contained in:
28
server.py
28
server.py
@@ -40,6 +40,7 @@ app.add_middleware(
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
|
||||
# --- HTML 라우팅 ---
|
||||
import csv
|
||||
|
||||
@@ -50,29 +51,41 @@ async def get_project_data():
|
||||
"""
|
||||
projects = []
|
||||
try:
|
||||
if not os.path.exists("sheet.csv"):
|
||||
return []
|
||||
|
||||
with open("sheet.csv", mode="r", encoding="utf-8-sig") as f:
|
||||
reader = csv.reader(f)
|
||||
rows = [row for row in reader if row] # 빈 행 제외
|
||||
rows = list(reader)
|
||||
|
||||
# 실제 데이터가 시작되는 지점 찾기 (No. 로 시작하는 행 다음부터)
|
||||
start_idx = -1
|
||||
# "No." 헤더를 찾아 데이터 시작점 결정
|
||||
start_idx = None
|
||||
for i, row in enumerate(rows):
|
||||
if row and "No." in row[0]:
|
||||
if any("No." in cell for cell in row):
|
||||
start_idx = i + 1
|
||||
break
|
||||
|
||||
if start_idx != -1:
|
||||
if start_idx is not None:
|
||||
for row in rows[start_idx:]:
|
||||
if len(row) >= 8:
|
||||
# [프로젝트명, 담당부서, 담당자, 최근활동로그, 파일수] 형식으로 추출
|
||||
# [프로젝트명, 담당부서, 담당자, 최근활동로그, 파일수]
|
||||
# 복구된 sheet.csv 형식에 맞춰 인덱스 추출 (1, 2, 3, 5, 7)
|
||||
try:
|
||||
# 파일 수 숫자로 변환 (공백 제거 후 처리)
|
||||
raw_count = row[7].strip()
|
||||
file_count = int(raw_count) if raw_count.isdigit() else 0
|
||||
except (ValueError, IndexError):
|
||||
file_count = 0
|
||||
|
||||
projects.append([
|
||||
row[1], # 프로젝트 명
|
||||
row[2], # 담당부서
|
||||
row[3], # 담당자
|
||||
row[5], # 최근 활동로그
|
||||
int(row[7]) if row[7].isdigit() else 0 # 파일 수
|
||||
file_count # 파일 수
|
||||
])
|
||||
except Exception as e:
|
||||
print(f"Error reading sheet.csv: {e}")
|
||||
return {"error": str(e)}
|
||||
|
||||
return projects
|
||||
@@ -118,4 +131,5 @@ async def sync_data():
|
||||
"""
|
||||
크롤링 서비스(crawler_service.py) 호출
|
||||
"""
|
||||
print(">>> /sync request received")
|
||||
return StreamingResponse(run_crawler_service(), media_type="text_event-stream")
|
||||
|
||||
Reference in New Issue
Block a user