guardia-itsm/main.py
2026-06-07 08:13:43 +09:00

660 lines
35 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from database import init_db
from fastapi.middleware.cors import CORSMiddleware
from routers import (
approvals, assign, audit, auth, cmdb, dashboard, kb, nlcmd, rating, tasks, work,
institutions, shell_scripts, timetable, attachments, notifications,
messenger, ssh, projects, vibe,
ssl_manager, pm, incidents, oncall, batch,
si_projects, si_wbs, si_requirements, si_issues,
si_risks, si_milestones, si_change_requests, si_tests,
agents,
analytics,
ws as ws_router,
timeline,
code_review,
anomaly,
chatbot,
kb_agent,
orchestrator,
predictive,
change,
problem,
capacity,
catalog,
ldap,
pam,
vuln_scan,
report,
metrics,
finops,
tenant_mgmt,
gateway,
license as license_router,
learning,
push as push_router,
scouter as scouter_router,
deliverables,
si_report,
compliance,
jmeter,
public_checklist,
customer_portal,
onboarding,
groupware,
siem,
topology,
portfolio,
infra_ext,
admin as admin_router,
external_api,
export_import,
dr,
network_devices,
autonomous,
rpa,
scraping,
supply_chain_security,
conversational_ops,
ux_analytics,
sr_auto_review,
alert_rules,
search as search_router,
sr_chat,
inventory,
system as system_router,
patches,
stats as stats_router,
cicd,
data_sync,
# Gen6 추가 (2026-06-07)
mcp_agents, platform_eng, advanced_security2, data_ai2, public_sector2, infra_native,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
# 디렉토리 생성
from pathlib import Path
(Path(__file__).parent / "uploads" / "sr_files").mkdir(parents=True, exist_ok=True)
(Path(__file__).parent / "uploads" / "workspaces").mkdir(parents=True, exist_ok=True)
await init_db()
from database import SessionLocal
from core.seed import seed_all
async with SessionLocal() as db:
await seed_all(db)
# 라이선스 상태 확인 (시작 시) — TRIAL 키는 GUARDIA_LICENSE_KEY 없이도 동작
from routers.license import get_license_status
async with SessionLocal() as db:
lic_status = await get_license_status(db)
if lic_status.get("valid"):
edition = lic_status["edition"]
days = lic_status["days_remaining"]
cust = lic_status["customer"]
if lic_status.get("is_trial"):
print(f"[LICENSE] TRIAL 체험판 활성 (D-{days}) - {cust}")
else:
print(f"[LICENSE] {edition} 라이선스 활성 ({days}일 남음) - {cust}")
if lic_status.get("expiry_warning"):
print(f"[LICENSE] 만료 {days}일 남음 - 갱신을 준비하세요.")
elif lic_status.get("expired"):
print("[LICENSE] 라이선스가 만료되었습니다. 갱신이 필요합니다.")
else:
print("[LICENSE] 라이선스 미등록 - /license 에서 무료 체험을 시작하거나 키를 등록하세요.")
# 자동 복구 런북 + 정책 엔진 시드
from routers.auto_remediation_runbook import seed_runbooks
from routers.policy_engine import seed_policies
await seed_runbooks()
await seed_policies()
# A-1: WebSocket ↔ SSE 통합 패치
from routers.ws import _integrate_with_sse_bus
_integrate_with_sse_bus()
# 백그라운드 스케줄러 시작
from core.scheduler import start_scheduler, init_batch_jobs_from_db
start_scheduler()
await init_batch_jobs_from_db() # DB에서 활성 배치 잡 자동 등록
yield
# 스케줄러 종료
from core.scheduler import stop_scheduler
stop_scheduler()
# F-2: Redis 연결 종료
try:
from core.cache import close_redis
await close_redis()
except Exception:
pass
app = FastAPI(title="GUARDiA ITSM", version="2.0.0", lifespan=lifespan)
@app.middleware("http")
async def add_copyright_header(request, call_next):
response = await call_next(request)
response.headers["X-Powered-By"] = "GUARDiA ITSM 2.0"
response.headers["X-Copyright"] = "Copyright 2026 GUARDiA All Rights Reserved"
return response
# ── F-2: Redis 캐시 종료 훅 ──────────────────────────────────────────────────
# (lifespan의 yield 이후에 실행 — close_redis는 shutdown시 호출)
# ── F-3: Rate Limiting 미들웨어 등록 ─────────────────────────────────────────
from core.ratelimit import setup_rate_limiting
setup_rate_limiting(app)
# ── CORS: 개방망/폐쇄망 자동 전환 ───────────────────────────────────────────
import os as _os
_NETWORK_MODE = _os.environ.get("GUARDIA_NETWORK_MODE", "closed") # closed | open
_ALLOWED_ORIGINS_ENV = _os.environ.get("GUARDIA_ALLOWED_ORIGINS", "")
if _NETWORK_MODE == "open":
# 개방망: 환경변수로 지정된 출처 + 기본 로컬 허용
_extra = [o.strip() for o in _ALLOWED_ORIGINS_ENV.split(",") if o.strip()]
_cors_origins = ["http://localhost:8001", "http://127.0.0.1:8001"] + _extra
_cors_allow_credentials = True
else:
# 폐쇄망 기본값 (localhost only)
_cors_origins = ["http://localhost:8001", "http://127.0.0.1:8001"]
_cors_allow_credentials = False
app.add_middleware(
CORSMiddleware,
allow_origins=_cors_origins,
allow_origin_regex=r"https?://.*" if _NETWORK_MODE == "open" else None,
allow_methods=["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
allow_headers=["*"],
allow_credentials=_cors_allow_credentials,
expose_headers=["X-Request-ID", "X-Powered-By"],
max_age=600,
)
app.include_router(auth.router)
app.include_router(dashboard.router)
app.include_router(assign.router)
app.include_router(kb.router)
app.include_router(nlcmd.router)
app.include_router(tasks.router)
app.include_router(approvals.router)
app.include_router(cmdb.router)
app.include_router(audit.router)
app.include_router(work.router)
app.include_router(rating.router)
app.include_router(institutions.router)
app.include_router(shell_scripts.router)
app.include_router(timetable.router)
app.include_router(attachments.router)
app.include_router(notifications.router)
app.include_router(messenger.router)
app.include_router(ssh.router)
app.include_router(projects.router)
app.include_router(vibe.router)
app.include_router(ssl_manager.router)
app.include_router(pm.router)
app.include_router(incidents.router)
app.include_router(oncall.router)
app.include_router(batch.router)
# ── SI 프로젝트 관리 (분석→설계→구현→인도) ─────────────────────────────────
app.include_router(si_projects.router)
app.include_router(si_wbs.router)
app.include_router(si_requirements.router)
app.include_router(si_issues.router)
app.include_router(si_risks.router)
app.include_router(si_milestones.router)
app.include_router(si_change_requests.router)
app.include_router(si_tests.router)
# ── AI 에이전트 (Paperclip × GUARDiA, Ollama 로컬 LLM) ──────────────────────
app.include_router(agents.router)
# ── Analytics (E-2 배포 성공률 트렌드, E-3 엔지니어 워크로드) ─────────────────
app.include_router(analytics.router)
# ── A-1: WebSocket 실시간 대시보드 ───────────────────────────────────────────
app.include_router(ws_router.router)
# ── A-4: 운영 이벤트 타임라인 ────────────────────────────────────────────────
app.include_router(timeline.router)
# ── B-3: 코드 리뷰 에이전트 ──────────────────────────────────────────────────
app.include_router(code_review.router)
# ── B-1: AI 이상 탐지 ────────────────────────────────────────────────────────
app.include_router(anomaly.router)
# ── B-2: 자연어 SR 접수 챗봇 ─────────────────────────────────────────────────
app.include_router(chatbot.router)
# ── B-4: KB 자동 업데이트 에이전트 ───────────────────────────────────────────
app.include_router(kb_agent.router)
# ── B-5: 멀티 에이전트 협업 오케스트레이션 ────────────────────────────────────
app.include_router(orchestrator.router)
# ── B-6: 예측 유지보수 ────────────────────────────────────────────────────────
app.include_router(predictive.router)
# ── C-2: 변경 관리 CAB ───────────────────────────────────────────────────────
app.include_router(change.router)
# ── C-3: Problem Management ─────────────────────────────────────────────────
app.include_router(problem.router)
# ── C-4: 용량 관리 대시보드 ──────────────────────────────────────────────────
app.include_router(capacity.router)
# ── C-5: 서비스 카탈로그 ──────────────────────────────────────────────────────
app.include_router(catalog.router)
# ── D-1: LDAP/AD 연동 ────────────────────────────────────────────────────────
app.include_router(ldap.router)
# ── D-3: 특권 접근 관리 (PAM) ─────────────────────────────────────────────────
app.include_router(pam.router)
# ── D-4: 보안 취약점 자동 스캔 ───────────────────────────────────────────────
app.include_router(vuln_scan.router)
# ── E-1: 월별 리포트 자동 생성 ───────────────────────────────────────────────
app.include_router(report.router)
# ── E-4: Grafana 연동 (Prometheus 메트릭) ─────────────────────────────────
app.include_router(metrics.router)
# ── E-5: FinOps 비용 분석 ────────────────────────────────────────────────
app.include_router(finops.router)
# ── F-1: 멀티테넌트 데이터 격리 ──────────────────────────────────────────
from middleware.tenant import TenantMiddleware
app.add_middleware(TenantMiddleware)
app.include_router(tenant_mgmt.router)
# ── F-5: OpenAPI 외부 연동 게이트웨이 ────────────────────────────────────
app.include_router(gateway.router)
# ── Self-Improving Learning Loop ──────────────────────────────────────────
app.include_router(learning.router)
# ── 라이선스 관리 ──────────────────────────────────────────────────────────
app.include_router(license_router.router)
# ── G-10: PWA Push 알림 ──────────────────────────────────────────────────
app.include_router(push_router.router)
# Scouter APM
app.include_router(scouter_router.router)
# PMS — 산출물 + 보고서
app.include_router(deliverables.router)
app.include_router(si_report.router)
# 준수성 점검 (시큐어코딩/웹접근성/개인정보보호)
app.include_router(compliance.router)
# 성능 테스트 (JMeter JTL 분석 + 내장 부하 테스트)
app.include_router(jmeter.router)
# 공공기관 필수 기능 체크리스트
app.include_router(public_checklist.router)
# 추가 기능
app.include_router(customer_portal.router) # 고객 셀프서비스 포털
app.include_router(onboarding.router) # 온보딩 가이드 챗봇
app.include_router(groupware.router) # 그룹웨어 전자결재 연동
app.include_router(siem.router) # SIEM 보안 이벤트 연동
app.include_router(topology.router) # 네트워크 토폴로지 시각화
app.include_router(portfolio.router) # 포트폴리오 + 리소스 관리
app.include_router(infra_ext.router) # Zero Trust + K8s + ERP
app.include_router(admin_router.router) # GS인증: About + 백업/복구 + 에러코드
app.include_router(external_api.router) # 개방망 외부 API (API Key 인증)
app.include_router(export_import.router) # 폐쇄망 ↔ 개방망 Export/Import
app.include_router(dr.router) # DR 자동화 (Failover/RTO-RPO/백업검증)
app.include_router(network_devices.router) # 네트워크 장비 관리 (스위치/라우터/방화벽)
app.include_router(autonomous.router) # 자율 운영 (자동처리/승인 게이트)
app.include_router(rpa.router) # RPA 봇 (Validation 학습 + 자동화 실행)
app.include_router(scraping.router) # 스크랩핑 봇 (URL 수집 + 게시/삭제/원복)
app.include_router(conversational_ops.router) # 대화형 운영 AI (자연어 명령 실행)
app.include_router(ux_analytics.router) # UX 분석 (이벤트·히트맵·퍼널·AI 제안)
# ── AI 거버넌스 (2세대 확장 — 편향감사·XAI·공공기관 윤리) ──────────────────────
from routers import ai_governance
app.include_router(ai_governance.router) # AI 거버넌스
# ── GUARDiA 확장 v3 (2026-06-02) ─────────────────────────────────────────────
from routers import rag_engine, jira_sync, kpi_engine, tenant_portal, bi_dashboard, autonomous_workflow
app.include_router(rag_engine.router) # RAG 하이브리드 검색 + Ollama 답변
app.include_router(jira_sync.router) # Jira 양방향 SR 동기화
app.include_router(kpi_engine.router) # KPI 정의·계산·신호등
app.include_router(tenant_portal.router) # 테넌트 셀프서비스 포털
app.include_router(bi_dashboard.router) # BI 대시보드 (트렌드·히트맵·퍼널)
app.include_router(autonomous_workflow.router) # 자율 워크플로우 엔진
# ── GUARDiA 확장 v3 P2 (2026-06-02) ──────────────────────────────────────────
from routers import kubernetes, sso_provider, predictive_ops, slack_connector, white_label
app.include_router(kubernetes.router) # K8s 클러스터 에이전트리스 관리
app.include_router(sso_provider.router) # SSO 통합 인증 (SAML/OIDC)
app.include_router(predictive_ops.router) # 예측 운영 분석 (SLA/SR급증/서버장애)
app.include_router(slack_connector.router) # Slack 연동 (알림/명령어)
app.include_router(white_label.router) # 화이트라벨 브랜딩
# ── GUARDiA 확장 v3 P3 (2026-06-02) ──────────────────────────────────────────
from routers import (
multimodal, learning_loop, ai_insights, container_alerts, ncloud,
billing, servicenow, erp_connector, kakao_notify,
auto_report, benchmark, cohort_analysis,
)
app.include_router(multimodal.router) # 멀티모달 AI (이미지/로그 분석)
app.include_router(learning_loop.router) # Self-Improving Learning Loop
app.include_router(ai_insights.router) # AI 운영 인사이트 + 주간 리포트
app.include_router(container_alerts.router) # 컨테이너 이상 감지 → SR 자동 생성
app.include_router(ncloud.router) # NCloud 서버/LB/스토리지 관리
app.include_router(billing.router) # 구독·과금·청구서
app.include_router(servicenow.router) # ServiceNow CMDB/Incident 연동
app.include_router(erp_connector.router) # ERP/그룹웨어 연동
app.include_router(kakao_notify.router) # 카카오 알림톡
app.include_router(auto_report.router) # 자동 보고서 생성·다운로드
app.include_router(benchmark.router) # 기관 간 익명 벤치마킹
app.include_router(cohort_analysis.router) # 코호트 분석
# ── GUARDiA 고급 확장 (2026-06-02) — 20개 신규 라우터 ─────────────────────────
from routers import (
# CMDB 자동 발견
autodiscovery, snmp_discovery, dependency_map, config_inventory,
# NL 쿼리
nlquery, op_assistant, query_history,
# 구성 드리프트
drift_detection, golden_config, auto_remediation,
# 멀티클라우드
multicloud, aws_connector, cost_optimizer, cloud_migration,
# 공공기관 특화
narasajang, public_api_hub, isp_support, network_zone, k_cloud, e_procurement,
)
app.include_router(autodiscovery.router) # CMDB SSH 자동 발견
app.include_router(snmp_discovery.router) # SNMP 네트워크 장비 발견
app.include_router(dependency_map.router) # 서비스 의존성 자동 매핑
app.include_router(inventory.router) # #62 부품 재고 (/api/inventory/parts — config_inventory보다 먼저 등록)
app.include_router(config_inventory.router) # 서버 구성 인벤토리 자동 수집
app.include_router(nlquery.router) # Text-to-SQL 자연어 쿼리
app.include_router(op_assistant.router) # 대화형 운영 어시스턴트
app.include_router(query_history.router) # 쿼리 이력·즐겨찾기·공유
app.include_router(drift_detection.router) # 구성 드리프트 감지
app.include_router(golden_config.router) # 골든 구성 정의·버전 관리
app.include_router(auto_remediation.router) # 승인 기반 자동 교정
app.include_router(multicloud.router) # 멀티클라우드 통합 관제
app.include_router(aws_connector.router) # AWS EC2/RDS 연동
app.include_router(cost_optimizer.router) # 클라우드 비용 최적화 AI
app.include_router(cloud_migration.router) # On-prem → K-Cloud 전환
app.include_router(narasajang.router) # 나라장터 조달 연동
app.include_router(public_api_hub.router) # 공공 API 허브 (data.go.kr)
app.include_router(isp_support.router) # ISP 수립 지원
app.include_router(network_zone.router) # 행정망/인터넷망 분리 관리
app.include_router(k_cloud.router) # K-Cloud 공공 클라우드 전환
app.include_router(e_procurement.router) # 전자조달 계약·검수·납품
# ── Upstage OCR 연동 (2026-06-02) ────────────────────────────────────────────
from routers import upstage_ocr, doc_workflow, doc_template
app.include_router(upstage_ocr.router) # Upstage Document AI OCR 엔진
app.include_router(doc_workflow.router) # 문서 워크플로우 (계약서/납품서/청구서 등)
app.include_router(doc_template.router) # 문서 추출 템플릿 관리
# ── GUARDiA 기능 개선 v4 ────────────────────────────────────────────────────
from routers import app_deploy, batch_ssh, asset_qr, smart_notify
app.include_router(app_deploy.router) # 모바일 APK 배포 + QR 코드 생성
app.include_router(batch_ssh.router) # 다중 서버 동시 SSH 실행
app.include_router(asset_qr.router) # 서버 자산 QR 태그 관리
app.include_router(smart_notify.router) # 스마트 알림 규칙 엔진
# ── 확장 ChatOps + 예측 장애 방지 ────────────────────────────────────────────
from routers import chatops_extended, predictive_failure
app.include_router(chatops_extended.router) # 확장 ChatOps (채널별 webhook·인터랙티브·브로드캐스트)
app.include_router(predictive_failure.router) # 예측 장애 방지 (전조신호·패턴분석·예방조치)
# ── GUARDiA 차세대 확장 — 2026 트렌드 기반 (Gartner/EU CRA/국정원 N²SF) ──────
from routers import (
agentic_aiops, otel_tracing, mlsecops, # AIOps 2.0
ztna, sbom, n2sf, # Zero Trust + Supply Chain
idp_catalog, idp_template, idp_portal, # Internal Developer Platform
greenops, edge_monitor, energy_optimizer, # GreenOps + Edge/IoT
)
app.include_router(agentic_aiops.router) # Agentic AI tool-calling 엔진
app.include_router(otel_tracing.router) # OpenTelemetry 분산 트레이싱
app.include_router(mlsecops.router) # AI 모델 보안·버전 관리
app.include_router(ztna.router) # Zero Trust 정책 엔진
app.include_router(sbom.router) # SBOM CycloneDX 생성·관리
app.include_router(n2sf.router) # N²SF 준수 점검
app.include_router(idp_catalog.router) # IDP 소프트웨어 카탈로그
app.include_router(idp_template.router) # IDP Golden Path 템플릿
app.include_router(idp_portal.router) # IDP 셀프서비스 포털
app.include_router(greenops.router) # 탄소 배출 추적
app.include_router(edge_monitor.router) # Edge/IoT 모니터링
app.include_router(energy_optimizer.router) # 에너지 최적화
# ── GUARDiA Brain — AI 지능화 엔진 ─────────────────────────────────────────
from routers import (
agent_memory, knowledge_graph,
skill_registry, skill_miner,
finetune_pipeline,
ai_dashboard,
)
app.include_router(agent_memory.router) # 영구 메모리 엔진
app.include_router(knowledge_graph.router) # 운영 지식 그래프
app.include_router(skill_registry.router) # 스킬 레지스트리
app.include_router(skill_miner.router) # 자동 스킬 획득
app.include_router(finetune_pipeline.router) # LoRA 파인튜닝 파이프라인
app.include_router(ai_dashboard.router) # AI 뇌 엔진 대시보드
# ── 디자인 AI + 스마트 UX ──────────────────────────────────────────────────
from routers import design_analyzer, icon_generator, css_generator, smart_ux
app.include_router(design_analyzer.router) # 디자인 SR AI 자동화 (Ollama llava)
app.include_router(icon_generator.router) # SVG 아이콘 생성
app.include_router(css_generator.router) # 자연어→CSS/Tailwind
app.include_router(smart_ux.router) # 다음명령 제시 + 음성처리
# ── 부모 역할 4가지: 건강검진·성장일지·미래준비·독립지원 ─────────────────────
from routers import (
health_scheduler, self_healer,
changelog_tracker, manual_updater, growth_dashboard,
push_notify, i18n_engine, auto_finetune,
self_report, independence_meter,
)
app.include_router(health_scheduler.router) # 건강검진 — 정기 테스트 스케줄러
app.include_router(self_healer.router) # 건강검진 — 자가 수복
app.include_router(changelog_tracker.router) # 성장일지 — 변경이력 자동 수집
app.include_router(manual_updater.router) # 성장일지 — 매뉴얼 자동 업데이트
app.include_router(growth_dashboard.router) # 성장일지 — 기능 성장 대시보드
app.include_router(push_notify.router) # 미래준비 — 모바일 푸시알림
app.include_router(i18n_engine.router) # 미래준비 — 다국어 번역 관리
app.include_router(auto_finetune.router) # 미래준비 — LoRA 자동 파인튜닝
app.include_router(self_report.router) # 독립지원 — 자율 주간 보고서
app.include_router(independence_meter.router) # 독립지원 — 자립도 측정·추적
# ── CI/CD 자동 배포 ──────────────────────────────────────────────────────────
from routers import cicd_deploy
app.include_router(cicd_deploy.router) # workspace → Gitea → 서버 배포 트리거
# ── 테넌트 AI + 워크플로우 엔진 ──────────────────────────────────────────────
from routers import tenant_ai, workflow_engine
app.include_router(tenant_ai.router) # 테넌트 AI (개인화 모델·KB·파인튜닝)
app.include_router(workflow_engine.router) # AI 워크플로우 엔진 (정의·템플릿·실행이력)
# ── 디지털 트윈 ────────────────────────────────────────────────────────────────
from routers import digital_twin
app.include_router(digital_twin.router) # 디지털 트윈
# ── 자율 비용 최적화 ──────────────────────────────────────────────────────────
from routers import cost_optimizer_ai
app.include_router(cost_optimizer_ai.router) # 자율 비용 최적화
# ── 공급망 보안 ────────────────────────────────────────────────────────────────
app.include_router(supply_chain_security.router) # 공급망 보안
# ── 예측 용량 계획 ────────────────────────────────────────────────────────────
from routers import predictive_capacity
app.include_router(predictive_capacity.router) # 예측 용량 계획
# ── 자동 복구 런북 + 정책 엔진 ───────────────────────────────────────────────
from routers import auto_remediation_runbook, policy_engine
app.include_router(auto_remediation_runbook.router) # 자동 복구 런북 (Runbook 기반)
app.include_router(policy_engine.router) # 정책 엔진 (공공기관 IT 표준)
# ── 자율 패치 관리 + GRC 자동화 ──────────────────────────────────────────────
from routers import patch_management, grc_automation
app.include_router(patch_management.router) # 자율 패치 관리 (CVE 스캔·승인·SSH 실행·롤백)
app.include_router(grc_automation.router) # GRC 자동화 (정책·리스크·컴플라이언스·감사)
# ── SR 접수 자동 리뷰 — tmux 스냅샷 + Ollama AI 분석 ─────────────────────────
app.include_router(sr_auto_review.router) # SR 접수 즉시: 서버 스냅샷 + 하네스 + AI 리뷰
# ── 5세대 확장: 레거시현대화·옵저버빌리티·AI-SOC·시민포털·데이터거버넌스·하네스빌더·tmux ──
from routers import legacy_modernization, observability, ai_soc, citizen_portal, data_governance, harness_builder, tmux_sessions
app.include_router(legacy_modernization.router) # 레거시 현대화 (EOL탐지·마이그레이션·기술부채)
app.include_router(observability.router) # 통합 옵저버빌리티 (OTel·SLO·서비스맵)
app.include_router(ai_soc.router) # AI-SOC (상관분석·위협인텔·SOAR플레이북)
app.include_router(citizen_portal.router) # 시민 접점 포털 (QR신고·FAQ챗봇·만족도)
app.include_router(data_governance.router) # 데이터 거버넌스 (PII탐지·마스킹·계보·보존)
app.include_router(harness_builder.router) # 하네스 빌더 (노코드 에이전트 생성·실행·스킬)
app.include_router(tmux_sessions.router) # tmux 세션 관리 (영속터미널·공유·명령전송)
# ── 모바일 100기능 백엔드 API ────────────────────────────────────────────────
app.include_router(alert_rules.router) # #45 알림 규칙 CRUD
app.include_router(search_router.router) # #50 통합 검색
app.include_router(sr_chat.router) # #98 SR 채팅 (REST + WebSocket)
app.include_router(system_router.router) # #77 시스템 정보/릴리즈 노트
app.include_router(approvals.changes_router) # #68 변경 달력 (/api/changes)
app.include_router(patches.router) # #82 #83 CVE 패치 현황
app.include_router(stats_router.router) # #93~#97 통계·보고
app.include_router(cicd.router) # #99 #100 CI/CD 빌드 상태
from routers import mobile2_ext
app.include_router(mobile2_ext.router) # #101~#200 2세대 보조 (mobile2 prefix)
app.include_router(mobile2_ext.ai_router) # /api/ai-insights/*
app.include_router(mobile2_ext.greenops_router) # /api/greenops/*
app.include_router(mobile2_ext.soc2_router) # /api/ai-soc 확장
app.include_router(mobile2_ext.cmdb2_router) # /api/cmdb 확장 (ssl·eol·maintenance·warranty)
app.include_router(mobile2_ext.cloud_router) # /api/cloud/vms
app.include_router(mobile2_ext.kg_router) # /api/knowledge-graph/*
app.include_router(mobile2_ext.policy_router) # /api/policy/*
app.include_router(mobile2_ext.citizen_router) # /api/citizen/*
app.include_router(mobile2_ext.pub_router) # /api/public-sector/*
app.include_router(mobile2_ext.esign_router) # /api/approvals (전자서명 확장)
# ── 크로스 시스템 데이터 동기화 허브 ──────────────────────────────────────────
app.include_router(data_sync.router) # ITSM ↔ Manager ↔ Messenger 실시간 이벤트 버스
# ── 바이브코딩 + 디자인 AI (온프레미스 Ollama 전용) ───────────────────────────
from routers import vibe_coding, design_studio, agent_collab, gs_certification
app.include_router(vibe_coding.router) # 자연어 → 코드 생성 (Ollama codellama)
app.include_router(design_studio.router) # 온프레미스 디자인 스튜디오 (토큰·컴포넌트·CSS)
app.include_router(agent_collab.router) # 에이전트 간 의견 교환 · 협업 채널
app.include_router(gs_certification.router) # GS인증 요건 자동 점검·보고
# ── Gen6 확장 (2026-06-07) — MCP·플랫폼엔지니어링·고급보안2·데이터AI·공공특화2·클라우드네이티브 ──
app.include_router(mcp_agents.router) # MCP 에이전트 메시 (tool-calling·오케스트레이션)
app.include_router(platform_eng.router) # 플랫폼 엔지니어링 (IDP·골든패스·카탈로그·SLO)
app.include_router(advanced_security2.router) # 고급 보안 v2 (ZTNA v2·SBOM v2·포렌식·IAM감사)
app.include_router(data_ai2.router) # 데이터 AI v2 (벡터DB·RAG·LoRA API·임베딩)
app.include_router(public_sector2.router) # 공공기관 특화 v2 (K-CSAP·나라장터·GPKI·ISP)
app.include_router(infra_native.router) # 클라우드 네이티브 (eBPF·Wasm·서비스메시·이벤트소싱)
# ── 개방망 보안 헤더 미들웨어 ────────────────────────────────────────────────
@app.middleware("http")
async def add_security_headers(request, call_next):
response = await call_next(request)
response.headers["X-Content-Type-Options"] = "nosniff"
response.headers["X-Frame-Options"] = "DENY"
response.headers["X-XSS-Protection"] = "1; mode=block"
response.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
if _os.environ.get("GUARDIA_NETWORK_MODE") == "open":
response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains"
response.headers["Content-Security-Policy"] = (
"default-src 'self'; script-src 'self' 'unsafe-inline'; "
"style-src 'self' 'unsafe-inline'; img-src 'self' data:;"
)
return response
@app.get("/topology")
async def topology_page():
return FileResponse("static/index.html")
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/")
async def index():
return FileResponse("static/index.html")
@app.get("/customer")
async def customer():
return FileResponse("static/customer.html")
@app.get("/login")
async def login_page():
return FileResponse("static/login.html")
@app.get("/change-password")
async def change_password_page():
return FileResponse("static/change-password.html")
@app.get("/agents")
async def agents_page():
return FileResponse("static/agents.html")
@app.get("/incidents")
async def incidents_page():
return FileResponse("static/incidents.html")
@app.get("/ssl")
async def ssl_page():
return FileResponse("static/ssl.html")
@app.get("/pm")
async def pm_page():
return FileResponse("static/pm.html")
@app.get("/oncall")
async def oncall_page():
return FileResponse("static/oncall.html")
@app.get("/batch")
async def batch_page():
return FileResponse("static/batch.html")
@app.get("/vibe")
async def vibe_page():
return FileResponse("static/vibe.html")
@app.get("/si")
async def si_page():
return FileResponse("static/si.html")
@app.get("/license")
async def license_page():
return FileResponse("static/license.html")