diff --git a/ITAM_RMM_Integration_Plan.md b/ITAM_RMM_Integration_Plan.md new file mode 100644 index 0000000..9cb140e --- /dev/null +++ b/ITAM_RMM_Integration_Plan.md @@ -0,0 +1,64 @@ +# [보고서] IT 자산 실시간 통합 관리 시스템(RMM) 도입 계획서 + +## 1. 도입 배경 및 목적 +- **현황**: 현재 시스템은 수동 입력 기반의 정적 자산 대장으로 운영되어, 실제 장비의 가동 상태나 장애 여부를 실시간으로 파악하는 데 한계가 있음. +- **목적**: 전산자산(서버, PC)의 실시간 상태 정보를 자동 수집하고 장애 징후를 사전에 탐지하여, 선제적 유지보수 체계를 구축하고 운영 효율성을 극대화함. + +## 2. 시스템 주요 기능 +### 2.1 실시간 가동 상태 모니터링 +- 주요 자원(CPU, Memory, Disk) 사용률 실시간 수집 +- 운영체제(OS) 및 주요 시스템 서비스의 정상 작동 여부 확인 +- 자산 리스트 내 상태 인디케이터(정상/주의/장애) 표시 + +### 2.2 원격 제어 및 지원 통합 +- **기술적 구현 방식 (원클릭 자동 연결)**: 웹사이트에서 전화번호를 누르면 전화 앱이 켜지거나, 이메일 주소를 누르면 메일 창이 뜨는 것과 동일한 원리인 'URL 프로토콜 핸들러' 기술을 적용함. + - **자동화 프로세스**: 관리자가 화면의 [연결] 버튼을 클릭하면, 시스템이 팀뷰어나 애니데스크에 "A장비로 연결해줘"라는 신호를 직접 보냄. + - **편의성**: 관리자가 대상 장비의 ID나 비밀번호를 직접 복사해서 프로그램에 입력할 필요 없이, 클릭 한 번으로 내 PC에 설치된 원격 소프트웨어가 자동 실행되며 즉시 화면이 연결되도록 구현함. +- **유연한 접속 모드 지원**: + - **무인 접속(Unattended Access)**: 서버 및 공용 장비의 경우, 사전에 등록된 자격 증명을 통해 관리자 승인만으로 즉시 접속하여 야간 또는 긴급 장애에 대응함. + - **사용자 승인 접속(Attended Access)**: 개인용 PC의 경우, 사용자의 화면에 접속 요청 팝업을 띄우고 승인 시에만 화면 공유를 시작하여 개인정보 보호 및 보안 규정을 준수함. +- **보안 및 감사 로그 자동화**: + - 원격 접속이 시작되는 시점에 관리자 정보, 접속 목적, 대상 장비 정보를 DB에 자동 기록함. + - 세션 종료 후 총 작업 시간 및 조치 내역을 입력하도록 유도하여 투명한 유지보수 이력을 관리함. + +### 2.3 원격 지원 상세 워크플로우 (Remote Support Workflow) +관리자가 장애를 인지하고 조치를 완료하기까지의 표준 프로세스는 다음과 같습니다. + +1. **지원 요청 및 대상 선택**: 관리자가 ITAM 대시보드 또는 리스트에서 장애가 발생한 자산을 선택하고 '원격 지원 시작' 버튼을 클릭함. +2. **접속 모드 자동 판별**: + - **서버(무인)**: 시스템이 저장된 자격 증명을 확인하고 관리자에게 '즉시 연결' 팝업을 띄움. + - **PC(유인)**: 관리자가 '접속 요청' 버튼을 누르면, 대상 PC 화면에 "관리자가 원격 제어를 요청했습니다. 승인하시겠습니까?" 팝업이 전송됨. +3. **세션 초기화 및 로그 생성**: 접속 시도가 승인되면 서버는 즉시 [접속 일시, 관리자 ID, 대상 자산 번호]를 포함한 '세션 로그'를 생성하고 상태를 '진행 중'으로 변경함. +4. **프로토콜 핸들러 실행**: 브라우저가 관리자 PC의 원격 제어 앱(TeamViewer 등)을 자동으로 실행하며, 대상 장비의 ID와 패스워드 정보를 암호화된 인자로 전달하여 즉시 화면이 연결됨. +5. **조치 및 지원 수행**: 관리자가 실시간으로 장비를 제어하여 장애를 복구함. +6. **세션 종료 및 결과 기록**: + - 관리자가 원격 제어 앱을 종료하면, ITAM 웹 화면에 '조치 결과 입력' 창이 활성화됨. + - 관리자가 조치 내용(예: 서비스 재시작, 패치 적용 등)을 입력하고 저장하면 세션 로그가 최종 확정됨. +7. **이력 보관**: 완료된 모든 이력은 '자산 상세 정보 > 유지보수 이력' 탭에서 언제든지 열람 및 보고서 출력이 가능함. + +### 3.3 장애 사전 탐지 및 알림 +- 설정된 임계치(예: 디스크 잔량 10% 미만) 초과 시 즉시 알림 발송 +- 장기 미접속 또는 점검 누락 장비의 실시간 식별 + +## 3. 운영 프로세스 및 메커니즘 +1. **데이터 수집 (Collection)**: 각 자산에 배치된 에이전트가 시스템 정보를 주기적으로 추출함. +2. **분석 및 판별 (Analysis)**: 수집된 데이터를 중앙 서버에서 분석하여 장비의 상태 등급을 판정함. +3. **가시화 (Visualization)**: 통합 관리 대시보드를 통해 전체 자산의 헬스 상태를 실시간으로 출력함. +4. **대응 (Action)**: 장애 감지 시 원격 제어 기능을 호출하여 즉각적인 기술 지원을 수행함. + +## 4. 핵심 기술 및 도구 +- **에이전트**: PowerShell 기반의 경량 스크립트를 활용하여 별도의 상용 소프트웨어 설치 없이 시스템 정보 수집. +- **백엔드**: Node.js 환경에서 대용량 점검 데이터를 효율적으로 처리하고 데이터베이스화함. +- **프론트엔드**: TypeScript를 활용하여 직관적이고 반응성이 뛰어난 관리자 대시보드 구현. +- **원격 솔루션**: 보안성이 검증된 TeamViewer/AnyDesk의 프로토콜 연동을 통한 안전한 원격 접속 환경 구축. + +## 5. 기대 효과 +- **가용성 증대**: 장애 발생 전 사전 조치를 통해 시스템 다운타임을 최소화하고 업무 연속성 확보. +- **비용 절감**: 현장 방문 점검 최소화 및 원격 조치를 통한 IT 운영 관리 비용 및 시간 절감. +- **데이터 기반 의무**: 객관적인 성능 지표 및 점검 이력을 바탕으로 정밀한 자산 교체 주기 산정 및 감사 대응. +- **관리 생산성 향상**: 자산 정보 조회와 실시간 관리를 단일 플랫폼으로 통합하여 업무 프로세스 간소화. + +## 6. 향후 계획 +- 1단계: 서버 자산 중심의 실시간 모니터링 및 대시보드 구축 +- 2단계: 전사 PC 대상 원격 지원 및 보안 점검 기능 확대 적용 +- 3단계: 누적 데이터를 활용한 성능 분석 및 월간 운영 보고서 자동화 diff --git a/IT_Asset_RMM_System_Report_Detailed.md b/IT_Asset_RMM_System_Report_Detailed.md new file mode 100644 index 0000000..9fbcdf1 --- /dev/null +++ b/IT_Asset_RMM_System_Report_Detailed.md @@ -0,0 +1,318 @@ +# 전산자산 원격 점검 및 관리 시스템(RMM) 구축 조사 보고서 (상세판) + +## 1. RMM(Remote Monitoring & Management) 개요 + +RMM(Remote Monitoring & Management)은 서버, 업무용 PC, 노트북 등 IT 자산에 에이전트를 설치하여 +중앙 관리 서버에서 상태를 자동 수집하고, 이상 발생 시 경고를 발송하며, 필요 시 원격 접속으로 문제를 해결하는 +기업용 IT 운영 관리 체계입니다. + +### 주요 기능 +- CPU, 메모리, 디스크 상태 모니터링 +- Windows 서비스 및 프로세스 상태 점검 +- OS 패치 및 백신 상태 확인 +- 자동 점검 스케줄링 (1일 1~2회 이상) +- 이상 발생 시 이메일/메신저 알림 +- 원격 접속을 통한 장애 조치 +- 점검 이력 및 감사 로그 보관 + +--- + +## 2. 구축 목표 + +### 서버 및 서버용 PC +- 하루 1~2회 자동 점검 +- 주요 시스템 자원 및 서비스 상태 수집 +- 이상 발생 시 관리자 즉시 통보 + +### 업무용 PC +- 중앙 관리 서버에서 정기 점검 +- 패치 및 보안 상태 확인 + +### 개인 PC +- 사용자가 직접 점검 실행 +- 결과를 중앙 서버에 업로드 + +### 관리자 +- 마지막 점검 일시 확인 +- 성공/실패 여부 확인 +- 미실행 장비 식별 +- 필요 시 즉시 원격 접속 + +--- + +## 3. 기대 효과 + +- 장애 조기 탐지 및 사전 예방 +- 현장 방문 최소화 +- 점검 누락 방지 +- 감사 대응 자료 자동 확보 +- 자산 운영 현황 실시간 가시화 +- 사용자 점검 이행 여부 관리 + +--- + +## 4. 전체 시스템 아키텍처 + +```text +[관리자 웹 포털] + ├─ 대시보드 + ├─ 점검 결과 조회 + ├─ 원격 접속 버튼 + ├─ 알림 관리 + └─ 사용자 수행 현황 + + │ + ▼ + +[중앙 관리 서버] + ├─ 스케줄러 + ├─ 데이터 수집 API + ├─ 분석 엔진 + ├─ 알림 시스템 + └─ 데이터베이스 + + │ + ▼ + +[에이전트 설치 대상] + ├─ 서버 + ├─ 서버용 PC + ├─ 업무용 PC + └─ 개인 PC +``` + +--- + +## 5. 주요 구성 요소 + +### 5.1 중앙 관리 서버 +- 스케줄 실행 +- 상태 분석 +- 데이터 저장 +- 알림 전송 +- 웹 서비스 제공 + +### 5.2 에이전트 프로그램 +- PowerShell 또는 Python 기반 +- 상태 수집 +- 중앙 서버 전송 + +### 5.3 관리자 웹 대시보드 +- 실시간 현황 조회 +- 점검 이력 확인 +- 원격 접속 실행 + +### 5.4 원격 접속 솔루션 +- TeamViewer Tensor +- AnyDesk +- Microsoft Remote Help + +### 5.5 데이터베이스 +- SQL Server 또는 PostgreSQL + +### 5.6 알림 시스템 +- 이메일 +- Microsoft Teams +- Slack + +--- + +## 6. 점검 항목 + +### 공통 점검 항목 +- CPU 사용률 +- 메모리 사용률 +- 디스크 여유 공간 +- 네트워크 연결 상태 +- 시스템 부팅 시간 +- 재부팅 필요 여부 + +### 서버 추가 항목 +- 주요 서비스 실행 여부 +- 이벤트 로그 오류 +- 백업 결과 +- DB 상태 + +### PC 추가 항목 +- 백신 업데이트 여부 +- Windows Update 상태 +- BitLocker 상태 + +### 개인 PC +- 기본 시스템 상태 +- 점검 수행 여부 및 시간 기록 + +--- + +## 7. 운영 프로세스 + +### 정상 운영 +1. 스케줄러가 하루 1~2회 자동 실행 +2. 에이전트가 점검 수행 +3. 결과를 중앙 서버로 전송 +4. 분석 엔진이 정상 여부 판정 +5. 대시보드에 저장 + +### 이상 발생 시 +1. 임계치 초과 또는 서비스 중지 감지 +2. 관리자에게 알림 발송 +3. 관리자가 원격 접속 +4. 조치 내용 기록 + +### 개인 PC +1. 사용자가 '점검 실행' 버튼 클릭 +2. 스크립트 수행 +3. 결과 업로드 +4. 관리자가 이행 여부 확인 + +--- + +## 8. 개인 PC 자가 점검 기능 + +### 사용자 화면 +- 점검 실행 버튼 +- 결과 요약 표시 +- 마지막 점검 시간 표시 + +### 관리자 확인 항목 +- 마지막 점검 일시 +- 성공/실패 여부 +- 미실행 기간 +- 이상 발생 내역 + +--- + +## 9. 관리자 대시보드 구성 + +- 전체 자산 현황 +- 정상/경고/장애 통계 +- 최근 점검 성공률 +- 미점검 장비 목록 +- 개인 PC 수행 현황 +- 원격 접속 바로가기 +- 월간 보고서 + +--- + +## 10. 솔루션 비교 + +| 솔루션 | 특징 | 적합도 | +|------|------|------| +| Microsoft Intune | 엔드포인트 관리 및 규정 준수 | 매우 높음 | +| TeamViewer Tensor | 기업용 원격 접속 및 RMM 연동 | 매우 높음 | +| ManageEngine Endpoint Central | 자산, 패치, 원격 관리 통합 | 매우 높음 | +| Zabbix | 오픈소스 모니터링 | 높음 | +| Splashtop Remote Support | 원격 지원 + RMM | 높음 | +| Power BI | 대시보드 및 보고 | 매우 높음 | + +--- + +## 11. 권장 구축 방안 + +### 권장 아키텍처 +- Microsoft Intune +- TeamViewer Tensor +- PowerShell 자동 점검 스크립트 +- Microsoft SQL Server +- Power BI +- Microsoft Teams 알림 + +### 권장 이유 +- Windows 환경과 높은 호환성 +- 보안 및 감사 기능 우수 +- 사용자 PC까지 통합 관리 가능 +- 경영진 보고 자동화 가능 + +--- + +## 12. 보안 요구사항 + +- MFA(다중 인증) +- RBAC(역할 기반 권한 관리) +- TLS 암호화 +- 감사 로그 저장 +- 승인된 관리자만 원격 접속 +- 사용자 동의 기반 개인 PC 점검 + +--- + +## 13. 구축 일정 (예시) + +| 단계 | 기간 | +|------|------| +| 요구사항 분석 | 2주 | +| 솔루션 선정 | 2주 | +| PoC | 4주 | +| 설계 및 개발 | 6주 | +| 시범 운영 | 4주 | +| 전사 확대 | 4주 | + +총 예상 기간: 약 4~6개월 + +--- + +## 14. 예상 비용 (예시) + +| 항목 | 비용 수준 | +|------|----------| +| Intune 라이선스 | 사용자당 월 과금 | +| TeamViewer Tensor | 동시 세션 기준 | +| 개발 비용 | 중~고 | +| 운영 비용 | 중간 | + +--- + +## 15. 구축 우선순위 + +### 1단계 +- 핵심 서버 모니터링 +- 관리자 대시보드 + +### 2단계 +- 원격 접속 통합 +- 자동 알림 + +### 3단계 +- 개인 PC 자가 점검 + +### 4단계 +- Power BI 경영 보고 + +--- + +## 16. 최종 권장안 + +> Microsoft Intune + TeamViewer Tensor + PowerShell + SQL Server + Power BI + +이 조합은 다음 요구사항을 모두 충족합니다. +- 자동 점검 +- 이상 탐지 +- 원격 접속 +- 사용자 자가 점검 +- 이력 관리 +- 감사 대응 +- 경영진 보고 + +--- + +## 17. 공식 출처 및 링크 + +- Microsoft Intune: https://intune.microsoft.com +- TeamViewer Tensor: https://www.teamviewer.com/en/tensor/ +- TeamViewer RMM 소개: https://www.teamviewer.com/en/solutions/use-cases/rmm-remote-monitoring-management/ +- ManageEngine Endpoint Central: https://www.manageengine.com/products/endpoint-central/ +- Zabbix: https://www.zabbix.com +- Power BI: https://powerbi.microsoft.com +- Microsoft SQL Server: https://www.microsoft.com/sql-server +- Splashtop RMM 설명: https://www.splashtop.com/blog/what-is-remote-monitoring-and-management + +--- + +## 18. 결론 + +본 시스템은 서버, 업무용 PC, 개인 PC를 통합 관리하여 +정기적인 자동 점검과 이상 탐지, 원격 접속, 사용자 자가 점검, 점검 이력 관리까지 지원하는 +기업용 IT 운영 플랫폼입니다. + +특히 개인 PC의 자가 점검 기능과 관리자 추적 기능을 포함함으로써 +규정 준수와 운영 효율성을 동시에 확보할 수 있습니다. diff --git a/backup_atam_data.json b/backup_atam_data.json deleted file mode 100644 index 90a0674..0000000 --- a/backup_atam_data.json +++ /dev/null @@ -1,3889 +0,0 @@ -{ - "server_assets": [ - { - "id": "0yx8ear", - "corp": "삼안", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "SATIS 01", - "details": "구 SATIS 서버, 세금계산서 발행(회계)", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.228", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "satissg11707808", - "model_name": "HPE ProLiant DL380p GEN8", - "os": "Windows Server 2008 R2", - "cpu": "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz", - "ram": "20GB", - "gpu": "", - "storage1": "100GB", - "storage2": "458GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "1k3qili", - "corp": "", - "asset_code": "SVR-201707-0003", - "purchase_date": "201707", - "type": "서버", - "purpose": "XR WAS Server", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promise Vess R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "223pghb", - "corp": "", - "asset_code": "PC-202412-0002", - "purchase_date": "202412", - "type": "PC", - "purpose": "Ai-Cell-A100-1", - "details": "OCR, Local LLM 등 30여종", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "조립", - "os": "Ubuntu 24.04", - "cpu": "AMD Ryzen Threadripper PRO 7975WX", - "ram": "256GB", - "gpu": "", - "storage1": "2 TB", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "2vyfpks", - "corp": "", - "asset_code": "SVR-202305-0001", - "purchase_date": "202305", - "type": "서버", - "purpose": "HM MapService 2.0 서버", - "details": "공간데이터 다운로드 서비스 등", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "172.16.42.127", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL380 Gen10", - "os": "Windows Server 2019 Standard", - "cpu": "Intel Xeon Silver 4208", - "ram": "128 GB", - "gpu": "", - "storage1": "1.2 TB", - "storage2": "40 TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "3fyng4l", - "corp": "", - "asset_code": "SVR-201908-0002", - "purchase_date": "201908", - "type": "서버", - "purpose": "한맥 백업 서버", - "details": "한라 웹 소스 및 Miso DB 백업 서버", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "SuperMicro IR5019P-Series", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "3t8595f", - "corp": "", - "asset_code": "SVR-201707-0001", - "purchase_date": "201707", - "type": "서버", - "purpose": "구)스마트건설 서버", - "details": "XR 가상화 메인 서버 → IDC 산하ERP서버", - "current_org": "산하", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "172.16.10.226", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "ProLiant DL360 Gen10", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "46pa6q9", - "corp": "", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "GSIM 서버", - "details": "Basemap 데이터 저장", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2019 Standard", - "cpu": "Intel(R) Xeon(R) Silver 4214R", - "ram": "32GB", - "gpu": "", - "storage1": "300GB", - "storage2": "4TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "5b7er5d", - "corp": "", - "asset_code": "PC-201701-0001", - "purchase_date": "201701", - "type": "PC", - "purpose": "저장소 및 전산모사", - "details": "ParaView, CFDCore\r\n디지털화설문, 검색WIKI 웹서비스", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "172.16.10.213", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "조립PC\r\nProLiant DL360 Gen10", - "os": "Windows 10 Pro", - "cpu": "Intel Core i7-7700 CPU 3.60GHz", - "ram": "32GB", - "gpu": "", - "storage1": "500GB", - "storage2": "2TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "5ijlr2q", - "corp": "", - "asset_code": "SVR-201710-0002", - "purchase_date": "201710", - "type": "PC", - "purpose": "Ai-Cell-Util", - "details": "깃티, 매터모스트 등 70여종", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HP Z6", - "os": "Ubuntu 24.04", - "cpu": "Intel(R) Xeon(R) Gold 6248R", - "ram": "64GB", - "gpu": "", - "storage1": "2 TB", - "storage2": "8 TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "615nity", - "corp": "삼안", - "asset_code": "SVR-201912-0001", - "purchase_date": "201912", - "type": "서버", - "purpose": "삼안 인트라넷", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.237", - "remote_tool": "원격데스크탑\r\nRemote Util", - "server_id": "administrator\r\n118.220.172.237", - "server_pw": "samanerp1!\r\n1234아이티!", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2016", - "cpu": "intel xeon silver4214R CPU @2.40GHz 2.39GHZ", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "3.27TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "692s3fa", - "corp": "삼안", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "SATIS 02", - "details": "SATIS 리뉴얼 버전 (ERP 서버)", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.229", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "satissg11707808", - "model_name": "HPE ProLiant DL380p GEN8", - "os": "Windows Server 2008 R2", - "cpu": "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz", - "ram": "20GB", - "gpu": "", - "storage1": "100GB", - "storage2": "458GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "as0irys", - "corp": "PTC", - "asset_code": "SVR-202204-0002", - "purchase_date": "202204", - "type": "서버", - "purpose": "예비서버", - "details": "PTC 인트라넷 예비서버", - "current_org": "PTC", - "prev_org": "PTC", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "192.168.10.8", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "1234dkdlxl!", - "model_name": "HPE ProLiant DL360 GEN10", - "os": "Windows Server 2019", - "cpu": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "ram": "32GB", - "gpu": "", - "storage1": "278GB", - "storage2": "1.09TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "b46o1oh", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "AutoCAD 테스트 서버", - "details": "오토캐드 테스트 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10 Pro", - "cpu": "AMD Ryzen9 3900X 12-Core Processor", - "ram": "32GB", - "gpu": "", - "storage1": "500GB", - "storage2": "2TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "byzop6f", - "corp": "(주)장헌", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "서버", - "purpose": "(주) 장헌 인트라넷", - "details": "2025.12.23 (주) 장헌 센터 MDF에서 IDC로 이전 설치", - "current_org": "(주)장헌", - "prev_org": "장헌", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.76", - "remote_tool": "원격데스크탑", - "server_id": "User", - "server_pw": "Hanmac2141!%", - "model_name": "", - "os": "Windows 10", - "cpu": "12th Gen Intel(R) Core(TM) i7-12700F", - "ram": "32GB", - "gpu": "", - "storage1": "465GB", - "storage2": "1.81TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "c716tha", - "corp": "현타", - "asset_code": "SVR-202209-0003", - "purchase_date": "202209", - "type": "서버", - "purpose": "인트라넷", - "details": "", - "current_org": "현타", - "prev_org": "현타", - "location": "IDC (동관 53번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "1.234.37.172", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "Hanmac2141!", - "model_name": "HPE ProLiant DL380 GEN10", - "os": "Windows Server 2019", - "cpu": "Intel Xeon Silver 4210R CPU @ 2.40GHz 2.39GHz", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "cdv3f00", - "corp": "한맥", - "asset_code": "SVR-202012-0001", - "purchase_date": "202012", - "type": "서버", - "purpose": "한맥 인트라넷", - "details": "", - "current_org": "한맥", - "prev_org": "한맥", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.70", - "remote_tool": "원격데스크탑\r\nRemote Util", - "server_id": "administrator\r\n211.206.127.70", - "server_pw": "samanerp1!\r\n1234아이티!", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2016", - "cpu": "intel xeon silver4110 CPU @2.10GHz 2.10GHZ", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "2.7TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "e8f39ms", - "corp": "", - "asset_code": "PC-202412-0001", - "purchase_date": "202412", - "type": "PC", - "purpose": "BEPs 서버", - "details": "BEPs 개발서버, Outline 협업서비스", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Dell Precision 3680T", - "os": "Windows 11 Pro", - "cpu": "Intel Core i9 14900K (24 Core, 32 Thread)", - "ram": "64GB", - "gpu": "", - "storage1": "2 TB", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "epta6mt", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "한라CAD", - "details": "", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "찾아야함", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "조립PC", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "evamgnr", - "corp": "삼안", - "asset_code": "SVR-202504-0001", - "purchase_date": "202504", - "type": "서버", - "purpose": "안전관리", - "details": "삼안 개발서버2 - AI, SSL, 장헌TBM, 노드", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 202번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "1.234.37.171", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "samanerp1!", - "model_name": "HPE ProLiant DL380 GEN10", - "os": "Windwos Server 2022", - "cpu": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "ram": "128GB", - "gpu": "", - "storage1": "278GB", - "storage2": "3.27TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ezoax0f", - "corp": "삼안", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "웹 서버", - "details": "남양주 테스트 서버 (도메인 관리 기능 제거 2026.03.11)", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "samanweb.cafe24.com", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "saman+2013+web", - "model_name": "HPE ProLiant DL380p GEN8", - "os": "Windwos Server 2012", - "cpu": "Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 2.40GHz", - "ram": "16GB", - "gpu": "", - "storage1": "100GB", - "storage2": "230GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "f0g41bs", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "한맥CAD", - "details": "", - "current_org": "한맥", - "prev_org": "한맥", - "location": "한맥빌딩(MDF 실)", - "manager_main": "찾아야함", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "조립PC", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "f6sommq", - "corp": "PTC", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "서버", - "purpose": "DB 백업 서버", - "details": "구 파일 인트라넷, 2024.05.22에 DB 백업 테스트 서버로 변경 (데스크탑)", - "current_org": "PTC", - "prev_org": "PTC", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.74", - "remote_tool": "Remote Util", - "server_id": "211.206.127.74", - "server_pw": "1234dkdlxl!", - "model_name": "", - "os": "Window 7", - "cpu": "Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz 2.13GHz", - "ram": "4GB", - "gpu": "", - "storage1": "593GB", - "storage2": "1.23TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "g5yalni", - "corp": "삼안", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "삼안 인트라넷 예비", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.249", - "remote_tool": "원격데스크탑\r\nRemote Util", - "server_id": "administrator\r\n678-605-383-130", - "server_pw": "samanerp1!\r\n1234아이티!", - "model_name": "HPE ProLiant DL360 GEN9", - "os": "Windows Server 2008 R2", - "cpu": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 2.40GHz", - "ram": "32GB", - "gpu": "", - "storage1": "279GB", - "storage2": "2.72TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hazi0dt", - "corp": "삼안", - "asset_code": "SVR-202412-0003", - "purchase_date": "202412", - "type": "서버", - "purpose": "PQ DB 서버", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 204번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.231", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "7013ddj10235!", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2019", - "cpu": "intel xeon silver4210R CPU @2.40GHz 2.39GHZ", - "ram": "32GB", - "gpu": "", - "storage1": "278GB", - "storage2": "2.18TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hfs0hwy", - "corp": "한라", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "안전전산화 서버 (디자인팀 웹)", - "details": "인트라넷 서버 다운 시 백업용 대기, (임시) 디자인팀 웹 퍼블리싱 서버", - "current_org": "총괄기획실", - "prev_org": "한라", - "location": "IDC (동관 54번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "1.234.37.144", - "remote_tool": "Remote Util", - "server_id": "1.234.37.144", - "server_pw": "1234dkdlxl!", - "model_name": "HPE ProLiant DL360 GEN9", - "os": "Windows Server 2012", - "cpu": "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz", - "ram": "8GB", - "gpu": "", - "storage1": "299GB", - "storage2": "631GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hhpjhjg", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "AI 관련", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "htcdoqb", - "corp": "", - "asset_code": "SVR-202306-0001", - "purchase_date": "202306", - "type": "서버", - "purpose": "Gitlab Runner", - "details": "GitLab 운영 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Window Server 2019 Standard", - "cpu": "Intel(R) Xeon(R) Silver 4208 CPU @ 2.10GHz", - "ram": "64GB", - "gpu": "", - "storage1": "1.2 TB", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hx5maav", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "GSIM 언리얼 서버", - "details": "오브젝트 스토리지(클라우드)를 NAS에 백업(매주 목), ERP유저정보 업데이트(매일), 언리얼 스트리밍 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10 Pro", - "cpu": "Intel(R) Xeon(R) Gold 6136", - "ram": "128GB", - "gpu": "", - "storage1": "1TB", - "storage2": "8TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "i0hsbvg", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "공통 GIT 서버", - "details": "개발 소스코드 서버 (구조물 S/W ,그래픽스개발_HMEG.천지인)", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Dell EMC PowerEdge T380", - "os": "CentOS Linux 7 (Core)", - "cpu": "Intel(R) Xeon(R) E-2324G CPU @ 3.10GHz", - "ram": "16GB", - "gpu": "", - "storage1": "1TB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "k2rgwpj", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "BUILD 서버", - "details": "PM 컨버터(PDF) 서버, PDF 및 비디오 썸네일 생성", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10 Pro", - "cpu": "12th Gen Intel(R) Core(TM) i9-12900K", - "ram": "128GB", - "gpu": "", - "storage1": "4TB", - "storage2": "10TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ka4k5j4", - "corp": "", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "함양-합천 서버", - "details": "함양합천서버, GSIM 웹서비스, PM 웹서비스", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL380 Gen10", - "os": "Windows Server 2019 Standard", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "600GB", - "storage2": "10TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "m7w6kb5", - "corp": "", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "GSIM META 서버", - "details": "PM 백업 서버, 오브젝트 스토리지(온프레미스, 클라우드)API 연결", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2019 Standard", - "cpu": "Intel(R) Xeon(R) Silver 4208 CPU", - "ram": "96GB", - "gpu": "", - "storage1": "300GB", - "storage2": "4TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "m9h78ru", - "corp": "바론", - "asset_code": "SVR-202504-0003", - "purchase_date": "202504", - "type": "서버", - "purpose": "인트라넷", - "details": "", - "current_org": "바론", - "prev_org": "기술개발센터", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.75", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "Hanmac2141!%", - "model_name": "HPE ProLiant DL360 GEN10", - "os": "Windows Server 2022", - "cpu": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "2.18TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "mb93q5s", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "회계", - "details": "", - "current_org": "한맥", - "prev_org": "한맥", - "location": "한맥빌딩(MDF 실)", - "manager_main": "찾아야함", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "조립PC", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "n32fjee", - "corp": "", - "asset_code": "PC-202108-0001", - "purchase_date": "202108", - "type": "PC", - "purpose": "인사정보 서버", - "details": "인사정보 PM", - "current_org": "총괄기획실", - "prev_org": "총괄기획실", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "172.16.10.187", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HP Z2 Mini G5 Workstation", - "os": "Windows 11 Pro", - "cpu": "intel xeon w-1250p cpu", - "ram": "32GB", - "gpu": "", - "storage1": "2 TB", - "storage2": "2 TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "nmf3z8e", - "corp": "장헌", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "서버", - "purpose": "인트라넷(구)", - "details": "현재는 GIT 백업 으로 사용", - "current_org": "장헌", - "prev_org": "기술개발센터", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.110", - "remote_tool": "Remote Util\r\n원격데스크탑", - "server_id": "211.206.127.110\r\nUser", - "server_pw": "1234dkdlxl!\r\nHanmac2141!", - "model_name": "", - "os": "Windows Server 2019", - "cpu": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "o2yd1xl", - "corp": "PTC", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "PTC인트라넷", - "details": "구 파일 서버(부서자료 백업용), 2024.05.22 인트라넷서버로 교체", - "current_org": "PTC", - "prev_org": "PTC", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.72", - "remote_tool": "Remote Util", - "server_id": "211.206.127.72", - "server_pw": "1234dkdlxl!", - "model_name": "SYSTEM X3650 M2", - "os": "Windows Server 2008 R2", - "cpu": "Intel(R) Xeon(R) CPU E5520 @ 2.27GHz 2.26GHz", - "ram": "16GB", - "gpu": "", - "storage1": "556GB", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "o4fanbj", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "산하 ERP 개발서버", - "details": "산하 ERP 개발용 서버(산하 ERP는 클라우드)", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ojn1djz", - "corp": "장헌", - "asset_code": "SVR-202209-0002", - "purchase_date": "202209", - "type": "서버", - "purpose": "장헌인트라넷", - "details": "", - "current_org": "장헌", - "prev_org": "장헌", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.71", - "remote_tool": "Remote Util", - "server_id": "211.206.127.71", - "server_pw": "1234dkdlxl!", - "model_name": "HPE ProLiant DL380 GEN10", - "os": "Windows Server 2019", - "cpu": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "oygs4a4", - "corp": "", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "전산모사", - "details": "EGBIM, ParaView, CFDCore", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 11 Pro", - "cpu": "13th Gen Intel(R) Core(TM) i9-13900KS (3.20 GHz)", - "ram": "128GB", - "gpu": "", - "storage1": "2TB", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "pdrzgv9", - "corp": "", - "asset_code": "SVR-202403-0001", - "purchase_date": "202403", - "type": "서버", - "purpose": "GSIM 협업", - "details": "삼안 예비서버2 + 한종개발 +한종기존소스 vmware", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "HPE ProLiant DL380 Gen10", - "os": "Server 2019", - "cpu": "Intel Xeon(R) Silver 4208 CPU @ 2.10GHz", - "ram": "128GB", - "gpu": "", - "storage1": "300GB", - "storage2": "1.88TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "pic7ldg", - "corp": "삼안", - "asset_code": "SVR-202504-0002", - "purchase_date": "202504", - "type": "서버", - "purpose": "가족사 공통메뉴", - "details": "삼안 개발서버1 - QNA, 급여명세서", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 202번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.233", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "samanerp1!", - "model_name": "HPE ProLiant DL380 GEN10", - "os": "Windwos Server 2022", - "cpu": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "ram": "128GB", - "gpu": "", - "storage1": "278GB", - "storage2": "3.27TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "pvjiuu9", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "GSIM 테스트 서버", - "details": "개발 테스트용 일반 PC", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10 Pro", - "cpu": "Intel(R) Core(TM) i7-9700KF", - "ram": "32GB", - "gpu": "", - "storage1": "512GB", - "storage2": "512GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "qi3jv8r", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "공간데이터 서버", - "details": "인트라넷 공간정보신청 서비스, 과거 공간데이터(~2022년) 보관 - 추후 공간정보 백업서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "CentOS 7.6.1810 (Core)", - "cpu": "Intel Xeon Silver 4108 * 2", - "ram": "128 GB", - "gpu": "", - "storage1": "512 GB", - "storage2": "8 TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "qlzuplz", - "corp": "한라", - "asset_code": "SVR-202209-0001", - "purchase_date": "202209", - "type": "서버", - "purpose": "개발서버2", - "details": "PTC 연구비로 구매한 예비서버2\r\n이전 : 하수도자산 소스+프로그램 현재 : 큰길 서비스용 xampp+ PostgreSQL, BEPs", - "current_org": "한라", - "prev_org": "기술개발센터", - "location": "IDC (동관 53번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "192.168.20.171", - "remote_tool": "Remote Util\r\n원격데스크탑", - "server_id": "1.234.37.171\r\nadministrator", - "server_pw": "1234dkdlxl!\r\nHanmac2141!%", - "model_name": "HPE ProLiant DL380 Gen10", - "os": "Windows Server 2019 Standard", - "cpu": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "rpzqdok", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "한종 테스트", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "sarnjvr", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "공간정보 신청", - "details": "수치지형도 , 지적도 등 공간정보 자료 제공 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10", - "cpu": "Intel(R) Core i5-10400 CPU @ 2.90GHz 2.90GHz", - "ram": "16GB", - "gpu": "", - "storage1": "232GB", - "storage2": "931GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "t93020g", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "가평 VM 원격 서버", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ulmxkpk", - "corp": "장헌", - "asset_code": "SVR-202204-0001", - "purchase_date": "202204", - "type": "서버", - "purpose": "장헌 인트라넷 예비", - "details": "", - "current_org": "장헌", - "prev_org": "장헌", - "location": "IDC (동관 53번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "1.234.37.170", - "remote_tool": "Remote Util\r\n원격데스크탑", - "server_id": "1.234.37.170\r\nAdministrator", - "server_pw": "1234dkdlxl!\r\nHanmac2141!", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2019", - "cpu": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "uzgeybi", - "corp": "삼안", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "Oracle DB 서버", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 202번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.225", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "7013ddj10235!", - "model_name": "HPE ProLiant DL380 GEN9", - "os": "Windows Server 2012", - "cpu": "Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz 2.20GHz", - "ram": "64GB", - "gpu": "", - "storage1": "558GB", - "storage2": "1.09TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "vobo00b", - "corp": "", - "asset_code": "PC-202110-0001", - "purchase_date": "202110", - "type": "PC", - "purpose": "빌드서버", - "details": "인스톨 쉴드, 지라", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Dell EMC PowerEdge T350", - "os": "Windows Server 2022 Standard", - "cpu": "Intel(R) Xeon(R) E-2378G CPU @ 2.80GHz 2.81 GHz", - "ram": "32GB", - "gpu": "", - "storage1": "1TB", - "storage2": "4TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "we5apln", - "corp": "한라", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "한라 인트라넷", - "details": "인트라넷,안전, 운영, MISO 서버로 운영 중(win 2008)", - "current_org": "한라", - "prev_org": "한라", - "location": "IDC (동관 54번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "1.234.37.143", - "remote_tool": "Remote Util", - "server_id": "1.234.37.143", - "server_pw": "1234dkdlxl!", - "model_name": "HPE ProLiant DL360 GEN9", - "os": "Windows Server 2008 R2", - "cpu": "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz", - "ram": "8GB", - "gpu": "", - "storage1": "299GB", - "storage2": "631GB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ymcw975", - "corp": "", - "asset_code": "PC--0000", - "purchase_date": "", - "type": "PC", - "purpose": "HmEG 테스트 서버", - "details": "HmEG 테스트 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "Windows 10 Pro", - "cpu": "Intel(R) Core(TM) i5-10400F @ 2.906 GHz", - "ram": "16GB", - "gpu": "", - "storage1": "250GB", - "storage2": "1TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "zhjm5nt", - "corp": "한맥", - "asset_code": "SVR--0000", - "purchase_date": "", - "type": "서버", - "purpose": "한맥 인트라넷 예비", - "details": "단가, 입사자지원 서버 (4/1 장헌산업 이름으로 스마트 건설 용도 구매)", - "current_org": "한맥", - "prev_org": "장헌", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "211.206.127.78", - "remote_tool": "원격데스크탑", - "server_id": "administrator", - "server_pw": "Hanmac2141!", - "model_name": "HPE ProLiant DL360 Gen10", - "os": "Windows Server 2019", - "cpu": "intel xeon silver4214R CPU @2.40GHz 2.39GHZ", - "ram": "32GB", - "gpu": "", - "storage1": "280GB", - "storage2": "2.7TB", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - } - ], - "pc_assets": [ - { - "id": "0dm6v3v", - "corp": "한맥", - "asset_code": "HM-PC-2020-003", - "user": "홍길동", - "location": "본사 5층", - "cpu": "i5-10400", - "gpu": "-", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-10-20", - "price": "1,370,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "1ky5hkv", - "corp": "바론", - "asset_code": "HM-PC-2024-011", - "user": "", - "location": "지사 1층", - "cpu": "Ryzen 7", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-11-05", - "price": "860,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "2mkcpcm", - "corp": "한맥", - "asset_code": "HM-PC-2025-035", - "user": "", - "location": "지사 2층", - "cpu": "Ryzen 5", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-09-03", - "price": "770,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "2oiyjqa", - "corp": "삼안", - "asset_code": "HM-PC-2020-009", - "user": "홍길동", - "location": "본사 1층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-02-08", - "price": "900,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "3tbi0ya", - "corp": "한맥", - "asset_code": "HM-PC-2025-046", - "user": "홍길동", - "location": "지사 3층", - "cpu": "Ryzen 7", - "gpu": "-", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-01-17", - "price": "1,240,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "564z6nz", - "corp": "바론", - "asset_code": "HM-PC-2026-012", - "user": "", - "location": "본사 2층", - "cpu": "i7-12700", - "gpu": "GTX 1660", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-11-10", - "price": "960,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "5btnmr6", - "corp": "바론", - "asset_code": "HM-PC-2025-031", - "user": "박지훈", - "location": "지사 3층", - "cpu": "Ryzen 5", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-01-10", - "price": "1,110,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "677n8b7", - "corp": "한맥", - "asset_code": "HM-PC-2026-043", - "user": "박지훈", - "location": "본사 4층", - "cpu": "i7-12700", - "gpu": "-", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-11-04", - "price": "1,410,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "6q9ehoe", - "corp": "한맥", - "asset_code": "HM-PC-2025-037", - "user": "홍길동", - "location": "본사 4층", - "cpu": "Ryzen 7", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-06-01", - "price": "870,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "6w9889f", - "corp": "삼안", - "asset_code": "HM-PC-2021-030", - "user": "", - "location": "본사 4층", - "cpu": "i7-12700", - "gpu": "GTX 1660", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2021-05-08", - "price": "1,410,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "7um2rt7", - "corp": "삼안", - "asset_code": "HM-PC-2023-016", - "user": "김철수", - "location": "본사 5층", - "cpu": "Ryzen 7", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2023-03-11", - "price": "920,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "88swa9a", - "corp": "바론", - "asset_code": "HM-PC-2022-007", - "user": "", - "location": "지사 3층", - "cpu": "Ryzen 7", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-11-12", - "price": "900,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "8ao7tow", - "corp": "바론", - "asset_code": "HM-PC-2026-049", - "user": "홍길동", - "location": "본사 2층", - "cpu": "Ryzen 5", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-01-15", - "price": "1,320,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "8dealns", - "corp": "바론", - "asset_code": "HM-PC-2025-029", - "user": "이영희", - "location": "지사 3층", - "cpu": "i7-12700", - "gpu": "-", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-02-19", - "price": "1,360,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "9jfqnwt", - "corp": "삼안", - "asset_code": "HM-PC-2018-045", - "user": "박지훈", - "location": "지사 5층", - "cpu": "i5-10400", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2018-11-23", - "price": "830,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "bb6gofw", - "corp": "바론", - "asset_code": "HM-PC-2022-047", - "user": "김철수", - "location": "본사 4층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-04-15", - "price": "610,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "bclulvy", - "corp": "한맥", - "asset_code": "HM-PC-2022-024", - "user": "김팀장", - "location": "본사 3층", - "cpu": "Ryzen 5", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-09-05", - "price": "1,200,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "c8vawkj", - "corp": "바론", - "asset_code": "HM-PC-2025-032", - "user": "마리아", - "location": "본사 2층", - "cpu": "i5-10400", - "gpu": "GTX 1660", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-08-13", - "price": "1,490,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "cp9idwr", - "corp": "삼안", - "asset_code": "HM-PC-2022-038", - "user": "", - "location": "지사 5층", - "cpu": "Ryzen 7", - "gpu": "-", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-04-17", - "price": "1,420,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "d8hub4g", - "corp": "바론", - "asset_code": "HM-PC-2023-025", - "user": "", - "location": "본사 3층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2023-05-11", - "price": "1,470,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "e02zsht", - "corp": "한맥", - "asset_code": "HM-PC-2024-015", - "user": "신유진", - "location": "지사 1층", - "cpu": "Ryzen 5", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-09-06", - "price": "1,290,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "e352qix", - "corp": "삼안", - "asset_code": "HM-PC-2026-002", - "user": "윤대웅", - "location": "본사 5층", - "cpu": "i7-12700", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-04-19", - "price": "1,030,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ees27k2", - "corp": "삼안", - "asset_code": "HM-PC-2023-021", - "user": "", - "location": "지사 3층", - "cpu": "Ryzen 7", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2023-05-18", - "price": "540,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "eopuf5p", - "corp": "삼안", - "asset_code": "HM-PC-2022-010", - "user": "윤대웅", - "location": "지사 5층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-09-23", - "price": "1,040,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "f0h7a52", - "corp": "한맥", - "asset_code": "HM-PC-2017-039", - "user": "김철수", - "location": "본사 1층", - "cpu": "Ryzen 5", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2017-07-02", - "price": "1,450,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "f1yw8q7", - "corp": "한맥", - "asset_code": "HM-PC-2017-001", - "user": "홍길동", - "location": "본사 2층", - "cpu": "i5-10400", - "gpu": "-", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2017-06-27", - "price": "1,360,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "fdqihin", - "corp": "바론", - "asset_code": "HM-PC-2019-040", - "user": "김팀장", - "location": "지사 1층", - "cpu": "Ryzen 7", - "gpu": "GTX 1660", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2019-12-27", - "price": "1,280,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hh4bdmv", - "corp": "바론", - "asset_code": "HM-PC-2024-004", - "user": "신유진", - "location": "본사 3층", - "cpu": "i5-10400", - "gpu": "-", - "ram": "16GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-06-01", - "price": "720,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hi6k0u3", - "corp": "삼안", - "asset_code": "HM-PC-2020-026", - "user": "마리아", - "location": "지사 5층", - "cpu": "Ryzen 7", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-04-15", - "price": "1,340,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "igupfpl", - "corp": "바론", - "asset_code": "HM-PC-2024-018", - "user": "김철수", - "location": "본사 2층", - "cpu": "Ryzen 7", - "gpu": "-", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-01-27", - "price": "1,030,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "jvvzr0q", - "corp": "삼안", - "asset_code": "HM-PC-2026-013", - "user": "", - "location": "본사 4층", - "cpu": "Ryzen 5", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-02-13", - "price": "1,290,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "k6kpw69", - "corp": "삼안", - "asset_code": "HM-PC-2019-008", - "user": "윤대웅", - "location": "지사 1층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2019-09-04", - "price": "890,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "kbhib5d", - "corp": "삼안", - "asset_code": "HM-PC-2019-033", - "user": "", - "location": "지사 4층", - "cpu": "i7-12700", - "gpu": "RTX 4070", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2019-06-10", - "price": "720,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ksa3xuu", - "corp": "삼안", - "asset_code": "HM-PC-2019-014", - "user": "윤대웅", - "location": "지사 1층", - "cpu": "i7-12700", - "gpu": "-", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2019-11-28", - "price": "690,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "lx8lmnz", - "corp": "삼안", - "asset_code": "HM-PC-2020-005", - "user": "김팀장", - "location": "지사 1층", - "cpu": "i7-12700", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-09-22", - "price": "800,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "odd77ur", - "corp": "바론", - "asset_code": "HM-PC-2024-044", - "user": "홍길동", - "location": "본사 4층", - "cpu": "Ryzen 7", - "gpu": "GTX 1660", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-11-03", - "price": "520,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "pmf79ic", - "corp": "바론", - "asset_code": "HM-PC-2026-041", - "user": "김철수", - "location": "본사 1층", - "cpu": "i7-12700", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2026-04-24", - "price": "1,150,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "qcs82lb", - "corp": "삼안", - "asset_code": "HM-PC-2024-042", - "user": "신유진", - "location": "본사 1층", - "cpu": "i5-10400", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-11-07", - "price": "650,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "qjb3kz5", - "corp": "바론", - "asset_code": "HM-PC-2017-017", - "user": "김철수", - "location": "본사 5층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2017-04-28", - "price": "590,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "sayp9a6", - "corp": "바론", - "asset_code": "HM-PC-2025-048", - "user": "박지훈", - "location": "지사 4층", - "cpu": "Ryzen 5", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-08-01", - "price": "1,130,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "uu3e3p7", - "corp": "한맥", - "asset_code": "HM-PC-2018-006", - "user": "신유진", - "location": "본사 2층", - "cpu": "Ryzen 5", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2018-05-11", - "price": "540,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "vqcb09e", - "corp": "바론", - "asset_code": "HM-PC-2024-036", - "user": "윤대웅", - "location": "지사 5층", - "cpu": "Ryzen 5", - "gpu": "-", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2024-03-13", - "price": "590,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "wb9697r", - "corp": "한맥", - "asset_code": "HM-PC-2020-020", - "user": "", - "location": "본사 5층", - "cpu": "Ryzen 5", - "gpu": "GTX 1660", - "ram": "32GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-06-01", - "price": "830,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "wjbzneh", - "corp": "한맥", - "asset_code": "HM-PC-2025-028", - "user": "김철수", - "location": "본사 4층", - "cpu": "Ryzen 5", - "gpu": "-", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2025-05-18", - "price": "640,000", - "vendor": "컴퓨존", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "xpi653y", - "corp": "바론", - "asset_code": "HM-PC-2020-023", - "user": "김팀장", - "location": "지사 2층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2020-02-08", - "price": "560,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "xx3dqs6", - "corp": "한맥", - "asset_code": "HM-PC-2021-019", - "user": "박지훈", - "location": "지사 3층", - "cpu": "i5-10400", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "256GB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2021-06-24", - "price": "1,470,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "xxsx1ex", - "corp": "바론", - "asset_code": "HM-PC-2018-022", - "user": "홍길동", - "location": "지사 2층", - "cpu": "Ryzen 7", - "gpu": "RTX 4070", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2018-02-01", - "price": "830,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "yoo1re7", - "corp": "한맥", - "asset_code": "HM-PC-2018-034", - "user": "박지훈", - "location": "본사 5층", - "cpu": "i5-10400", - "gpu": "RTX 3060", - "ram": "16GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "-", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2018-04-06", - "price": "630,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "zwieocg", - "corp": "바론", - "asset_code": "HM-PC-2022-027", - "user": "마리아", - "location": "본사 3층", - "cpu": "Ryzen 5", - "gpu": "RTX 4070", - "ram": "32GB", - "ssd1": "1TB", - "ssd2": "", - "hdd1": "1TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2022-03-28", - "price": "1,260,000", - "vendor": "오피스디포", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "zz08j3r", - "corp": "바론", - "asset_code": "HM-PC-2018-050", - "user": "", - "location": "본사 5층", - "cpu": "i7-12700", - "gpu": "RTX 3060", - "ram": "32GB", - "ssd1": "512GB", - "ssd2": "", - "hdd1": "2TB", - "hdd2": "", - "ip_address": "", - "hw_spec": "", - "purchase_date": "2018-02-06", - "price": "590,000", - "vendor": "다나와", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - } - ], - "storage_assets": [ - { - "id": "0ecxlwq", - "corp": "", - "asset_code": "STO-202403-0002", - "purchase_date": "202403", - "type": "스토리지", - "purpose": "GSIM 협업 스토리지", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promiss R Series R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "1v5b2tf", - "corp": "", - "asset_code": "NAS-201404-0001", - "purchase_date": "201404", - "type": "NAS", - "purpose": "한라 NAS 2", - "details": "한라 기업부설연구소 공용 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.23", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS414j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "2dx6whb", - "corp": "한라", - "asset_code": "DAS-201907-0001", - "purchase_date": "201907", - "type": "서버", - "purpose": "", - "details": "파일서버 정보 없음(접속 불가)", - "current_org": "한라", - "prev_org": "한라", - "location": "IDC (동관 54번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "3fgahyo", - "corp": "", - "asset_code": "NAS-202308-0001", - "purchase_date": "202308", - "type": "NAS", - "purpose": "한라 NAS 1", - "details": "한라 공용 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.32", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS224+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "51f03yu", - "corp": "", - "asset_code": "NAS-202211-0001", - "purchase_date": "202211", - "type": "NAS", - "purpose": "한라 NAS 5", - "details": "한라 환경플랜트사업부 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.30", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS923+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "54v9m2c", - "corp": "", - "asset_code": "NAS-202206-0001", - "purchase_date": "202206", - "type": "NAS", - "purpose": "디자인팀1 NAS", - "details": "", - "current_org": "총괄기획실", - "prev_org": "총괄기획실", - "location": "한맥빌딩(MDF 실)", - "manager_main": "권순호 연구원", - "manager_sub": "김철수", - "ip_address": "192.168.9.99", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS1522+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "7mgxgv7", - "corp": "", - "asset_code": "STO--0000", - "purchase_date": "", - "type": "스토리지", - "purpose": "GSIM 스토리지", - "details": "ProjectMaster 오브젝트 스토리지", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promiss R Series R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "b2bvjcw", - "corp": "한라", - "asset_code": "DAS--0000", - "purchase_date": "", - "type": "서버", - "purpose": "", - "details": "파일서버 정보 없음(접속 불가)", - "current_org": "한라", - "prev_org": "한라", - "location": "IDC (동관 54번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "btei73p", - "corp": "", - "asset_code": "SVR-201708-0001", - "purchase_date": "201708", - "type": "NAS", - "purpose": "한라 백업 서버", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "RS822+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "cowf5lc", - "corp": "", - "asset_code": "NAS-201601-0003", - "purchase_date": "201601", - "type": "NAS", - "purpose": "한맥 NAS 3", - "details": "한맥 공용 NAS", - "current_org": "한맥", - "prev_org": "한맥", - "location": "한맥빌딩(MDF 실)", - "manager_main": "순서 파악 필요", - "manager_sub": "김철수", - "ip_address": "192.168.10.7", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS416j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "dzoq0tr", - "corp": "", - "asset_code": "NAS--0000", - "purchase_date": "", - "type": "NAS", - "purpose": "GSIM NAS", - "details": "팀 내부 자료 저장 , 정사영상 및 지도 데이터 저장 , Gitea 및 Git 내장 NAS", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Synology DS923+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "e52neft", - "corp": "", - "asset_code": "STO-201908-0003", - "purchase_date": "201908", - "type": "스토리지", - "purpose": "Backup Storage", - "details": "", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promise Vess R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:27.000Z" - }, - { - "id": "fl7ufz6", - "corp": "", - "asset_code": "SVR-201707-0002", - "purchase_date": "201707", - "type": "스토리지", - "purpose": "IDC 산하ERP서버", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promise Vess R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "g27d2py", - "corp": "삼안", - "asset_code": "STO-202503-0001", - "purchase_date": "202503", - "type": "서버", - "purpose": "성과품 백업 스토리지", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 202번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.241", - "remote_tool": "원격", - "server_id": "administrator\r\nadmin0", - "server_pw": "saman1!\r\nRoot1234", - "model_name": "", - "os": "Promiss R Series", - "cpu": "48TB", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "g5c27hj", - "corp": "", - "asset_code": "NAS-201501-0001", - "purchase_date": "201501", - "type": "스토리지", - "purpose": "-", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promise Vess", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "h9s2a2g", - "corp": "", - "asset_code": "NAS-202211-0002", - "purchase_date": "202211", - "type": "NAS", - "purpose": "한라 NAS 6", - "details": "한라 공용 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.27", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS923+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "hv9j8d0", - "corp": "", - "asset_code": "NAS-202206-0002", - "purchase_date": "202206", - "type": "NAS", - "purpose": "디자인팀2 NAS", - "details": "", - "current_org": "총괄기획실", - "prev_org": "총괄기획실", - "location": "한맥빌딩(MDF 실)", - "manager_main": "권순호 연구원", - "manager_sub": "김철수", - "ip_address": "192.168.9.100", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS1522+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "mh2g66k", - "corp": "", - "asset_code": "NAS-200707-0001", - "purchase_date": "200707", - "type": "NAS", - "purpose": "한라 NAS 4", - "details": "한라 공용 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.25", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "CS407", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "o50dqtc", - "corp": "", - "asset_code": "NAS-202206-0003", - "purchase_date": "202206", - "type": "NAS", - "purpose": "기술개발센터 NAS", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "RS815+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "p5vn2mv", - "corp": "", - "asset_code": "STO-201908-0001", - "purchase_date": "201908", - "type": "서버", - "purpose": "WAS Storage", - "details": "가족사 인트라넷 소스 백업 서버", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promise Vess R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "pphqt04", - "corp": "", - "asset_code": "NAS-201601-0002", - "purchase_date": "201601", - "type": "NAS", - "purpose": "한맥 NAS 2", - "details": "한맥 공용 NAS", - "current_org": "한맥", - "prev_org": "한맥", - "location": "한맥빌딩(MDF 실)", - "manager_main": "순서 파악 필요", - "manager_sub": "김철수", - "ip_address": "192.168.10.6", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS416j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "s30s6co", - "corp": "삼안", - "asset_code": "DAS--0000", - "purchase_date": "", - "type": "서버", - "purpose": "", - "details": "Satis01, Satis02 광케이블 연결 (물리연결)", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "s5lc90i", - "corp": "", - "asset_code": "STO-202305-0002", - "purchase_date": "202305", - "type": "스토리지", - "purpose": "HM MapService 2.0 스토리지", - "details": "공간데이터 저장용", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Promiss R Series R3600", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "sqeze8d", - "corp": "", - "asset_code": "NAS-201209-0001", - "purchase_date": "201209", - "type": "NAS", - "purpose": "총괄기획실 NAS", - "details": "총괄기획실 공용 NAS", - "current_org": "총괄기획실", - "prev_org": "총괄기획실", - "location": "한맥빌딩(MDF 실)", - "manager_main": "-", - "manager_sub": "김철수", - "ip_address": "192.168.10.5", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS413j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "tcmsqia", - "corp": "", - "asset_code": "NAS-201601-0001", - "purchase_date": "201601", - "type": "NAS", - "purpose": "한맥 NAS 1", - "details": "한맥 공용 NAS", - "current_org": "한맥", - "prev_org": "한맥", - "location": "한맥빌딩(MDF 실)", - "manager_main": "순서 파악 필요", - "manager_sub": "김철수", - "ip_address": "192.168.10.3", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS416j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "ti2e73o", - "corp": "", - "asset_code": "NAS--0000", - "purchase_date": "", - "type": "NAS", - "purpose": "그래픽스개발팀 데이터 백업 NAS", - "details": "그래픽스 개발팀 데이터 백업용 NAS", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "마천사무실", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "Synology DS923+", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "usw8y07", - "corp": "삼안", - "asset_code": "NAS-201906-0001", - "purchase_date": "201906", - "type": "서버", - "purpose": "성과품 스토리지", - "details": "매니지먼트 접속 확인 불가 (콘솔 연결 후 페이지 오픈 필요)", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 205번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.248", - "remote_tool": "원격", - "server_id": "administrator\r\n-", - "server_pw": "sg11707808\r\n-", - "model_name": "", - "os": "ENC_3U_16BAY_D // SEAGATE ST2000NM0045", - "cpu": "23TB", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "utrq339", - "corp": "", - "asset_code": "NAS-201404-0002", - "purchase_date": "201404", - "type": "NAS", - "purpose": "한라 NAS7", - "details": "한라 원주바이오 NAS", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "192.168.9.20", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS414j", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "wccgrer", - "corp": "", - "asset_code": "STO-201908-0004", - "purchase_date": "201908", - "type": "서버", - "purpose": "-", - "details": "", - "current_org": "기술개발센터", - "prev_org": "기술개발센터", - "location": "한맥빌딩(MDF 실)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "-", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "ProLiant DL360 Gen10", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "xg9p05x", - "corp": "삼안", - "asset_code": "NAS--0000", - "purchase_date": "", - "type": "서버", - "purpose": "인트라넷 백업 스토리지", - "details": "", - "current_org": "삼안", - "prev_org": "삼안", - "location": "IDC (서관 203번)", - "manager_main": "홍길동", - "manager_sub": "김철수", - "ip_address": "118.220.172.246", - "remote_tool": "원격", - "server_id": "administrator", - "server_pw": "sg11707808", - "model_name": "", - "os": "Promiss R Series", - "cpu": "36TB", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:07:13.000Z" - }, - { - "id": "y6epdvi", - "corp": "", - "asset_code": "NAS-201710-0001", - "purchase_date": "201710", - "type": "NAS", - "purpose": "NAS 13", - "details": "환경플랜트사업", - "current_org": "한라", - "prev_org": "한라", - "location": "한맥빌딩(MDF 실)", - "manager_main": "이준하 차장", - "manager_sub": "김철수", - "ip_address": "172.16.100.3", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "DS218play", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - }, - { - "id": "yslzufm", - "corp": "", - "asset_code": "STO-201908-0005", - "purchase_date": "201908", - "type": "스토리지", - "purpose": "WAS Storage", - "details": "", - "current_org": "", - "prev_org": "", - "location": "", - "manager_main": "", - "manager_sub": "", - "ip_address": "", - "remote_tool": "", - "server_id": "", - "server_pw": "", - "model_name": "", - "os": "", - "cpu": "", - "ram": "", - "gpu": "", - "storage1": "", - "storage2": "", - "storage3": "", - "monitoring": "", - "remarks": "", - "created_at": "2026-04-20T01:02:28.000Z" - } - ], - "equip_assets": [ - { - "id": "28wa20p", - "corp": "바론", - "type": "HM-TB-2026-005", - "asset_code": "아이패드 프로 12.9", - "asset_name": "지사", - "location": "", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2026-03-13", - "purchase_date": "1,500,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "2ikwidj", - "corp": "삼안", - "type": "HM-TB-2020-004", - "asset_code": "아이패드 프로 12.9", - "asset_name": "본사", - "location": "", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2020-09-08", - "purchase_date": "1,500,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "g7w01ud", - "corp": "삼안", - "type": "HM-TB-2024-002", - "asset_code": "아이패드 프로 12.9", - "asset_name": "지사", - "location": "이영희", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2024-10-05", - "purchase_date": "1,500,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ger7ivx", - "corp": "삼안", - "type": "HM-NB-2021-002", - "asset_code": "LG 그램 16인치", - "asset_name": "지사", - "location": "윤대웅", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2021-01-26", - "purchase_date": "1,800,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hgp00ck", - "corp": "삼안", - "type": "HM-NB-2023-005", - "asset_code": "LG 그램 16인치", - "asset_name": "본사", - "location": "홍길동", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2023-05-22", - "purchase_date": "1,800,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "hhpajol", - "corp": "삼안", - "type": "HM-PH-2021-005", - "asset_code": "갤럭시 S24", - "asset_name": "본사", - "location": "홍길동", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2021-01-04", - "purchase_date": "1,200,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "lui73me", - "corp": "삼안", - "type": "HM-NB-2022-004", - "asset_code": "LG 그램 16인치", - "asset_name": "지사", - "location": "김철수", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2022-09-11", - "purchase_date": "1,800,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "o1kn7bz", - "corp": "삼안", - "type": "HM-NB-2025-001", - "asset_code": "LG 그램 16인치", - "asset_name": "지사", - "location": "마리아", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2025-09-02", - "purchase_date": "1,800,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ouv0s34", - "corp": "한맥", - "type": "HM-PH-2022-001", - "asset_code": "갤럭시 S24", - "asset_name": "지사", - "location": "김팀장", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2022-10-09", - "purchase_date": "1,200,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "pyt610t", - "corp": "한맥", - "type": "HM-NB-2023-003", - "asset_code": "LG 그램 16인치", - "asset_name": "본사", - "location": "이영희", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2023-01-16", - "purchase_date": "1,800,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "qnq7vue", - "corp": "삼안", - "type": "HM-TB-2021-001", - "asset_code": "아이패드 프로 12.9", - "asset_name": "지사", - "location": "마리아", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2021-11-09", - "purchase_date": "1,500,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "tzjf0zg", - "corp": "삼안", - "type": "HM-PH-2019-002", - "asset_code": "갤럭시 S24", - "asset_name": "지사", - "location": "신유진", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2019-11-02", - "purchase_date": "1,200,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ymh7uj0", - "corp": "삼안", - "type": "HM-PH-2026-004", - "asset_code": "갤럭시 S24", - "asset_name": "지사", - "location": "", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2026-08-13", - "purchase_date": "1,200,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "ywvmsjy", - "corp": "바론", - "type": "HM-PH-2020-003", - "asset_code": "갤럭시 S24", - "asset_name": "지사", - "location": "", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2020-11-04", - "purchase_date": "1,200,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - }, - { - "id": "zk5c3j2", - "corp": "삼안", - "type": "HM-TB-2022-003", - "asset_code": "아이패드 프로 12.9", - "asset_name": "지사", - "location": "김철수", - "manager": "", - "ip_address": "", - "mac_address": "", - "hw_spec": "", - "os": "2022-06-28", - "purchase_date": "1,500,000", - "price": "브랜드 총판", - "vendor": "", - "doc_name": "", - "remarks": "", - "created_at": "2026-04-17T08:52:11.000Z" - } - ] -} \ No newline at end of file diff --git a/backup_refactor/index.html b/backup_refactor/index.html deleted file mode 100644 index 5208b03..0000000 --- a/backup_refactor/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - ITAM 자산관리 ERP - - - - - - - -
- -
- -
- - -
- -
-
- - - - - diff --git a/backup_refactor/package.json b/backup_refactor/package.json deleted file mode 100644 index 8b0150a..0000000 --- a/backup_refactor/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "hm-itam", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview", - "server": "node server.js", - "db-init": "node db_init.js" - }, - "devDependencies": { - "typescript": "^5.2.2", - "vite": "^5.2.0" - }, - "dependencies": { - "cors": "^2.8.6", - "dotenv": "^17.4.2", - "express": "^5.2.1", - "lucide": "^0.364.0", - "mysql2": "^3.22.1", - "xlsx": "^0.18.5" - } -} diff --git a/backup_refactor/src/components/Modal/BaseModal.ts b/backup_refactor/src/components/Modal/BaseModal.ts deleted file mode 100644 index 7e1c518..0000000 --- a/backup_refactor/src/components/Modal/BaseModal.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * 모든 모달의 공통 기능 (닫기, ESC 처리, 배경 클릭 등)을 관리하는 베이스 모듈입니다. - */ -export function initBaseModal() { - const closeAllModals = () => { - const modals = document.querySelectorAll('.modal-overlay'); - modals.forEach(modal => modal.classList.add('hidden')); - }; - - // ESC 키로 닫기 - window.addEventListener('keydown', (e) => { - if (e.key === 'Escape') closeAllModals(); - }); - - // 배경(Overlay) 클릭 시 닫기 (동적 생성된 모달 대응을 위해 이벤트 위임 고려 가능하나 일단 단순 구현) - document.addEventListener('click', (e) => { - const target = e.target as HTMLElement; - if (target.classList.contains('modal-overlay')) { - closeAllModals(); - } - }); - - return { closeAllModals }; -} - -/** - * 특정 모달을 엽니다. - * @param modalId 모달 엘리먼트의 ID - */ -export function openModal(modalId: string) { - const modal = document.getElementById(modalId); - if (modal) { - modal.classList.remove('hidden'); - } -} diff --git a/backup_refactor/src/components/Modal/DashboardDetailModal.ts b/backup_refactor/src/components/Modal/DashboardDetailModal.ts deleted file mode 100644 index 16c1273..0000000 --- a/backup_refactor/src/components/Modal/DashboardDetailModal.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { HardwareAsset, SoftwareAsset } from '../../core/excelHandler'; -import { state } from '../../core/state'; - -const DASHBOARD_DETAIL_MODAL_HTML = ` - -`; - -export function initDashboardDetailModal() { - if (!document.getElementById('dashboard-detail-modal')) { - document.body.insertAdjacentHTML('beforeend', DASHBOARD_DETAIL_MODAL_HTML); - } - - const modal = document.getElementById('dashboard-detail-modal')!; - const closeBtn = document.getElementById('btn-close-dashboard-detail-modal')!; - const cancelBtn = document.getElementById('btn-cancel-dashboard-detail-modal')!; - - const closeModal = () => modal.classList.add('hidden'); - closeBtn.addEventListener('click', closeModal); - cancelBtn.addEventListener('click', closeModal); - modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); -} - -export function openDashboardDetail(title: string, list: HardwareAsset[]) { - const modal = document.getElementById('dashboard-detail-modal'); - if (!modal) return; - const titleEl = document.getElementById('dashboard-detail-modal-title'); - const tbody = document.getElementById('dashboard-detail-tbody'); - if (!titleEl || !tbody) return; - const thead = tbody.closest('table')?.querySelector('thead'); - if (!thead) return; - - titleEl.textContent = title; - thead.innerHTML = `No유형자산코드명칭/모델위치담당/사용자구매일금액`; - tbody.innerHTML = ''; - if (list.length === 0) { - tbody.innerHTML = `해당 조건의 자산이 없습니다.`; - } else { - list.forEach((asset, idx) => { - let manager = asset.관리자 || asset.사용자 || asset.담당자_정 || '-'; - let name = asset.명칭 || asset.모델명 || '-'; - const tr = document.createElement('tr'); - tr.innerHTML = `${idx+1}${asset.type}${asset.자산코드}${name}${asset.위치||'-'}${manager}${asset.구매일||'-'}${asset.금액||'-'}`; - tbody.appendChild(tr); - }); - } - modal.classList.remove('hidden'); -} - -export function openSwDashboardDetail(title: string, list: SoftwareAsset[]) { - const modal = document.getElementById('dashboard-detail-modal'); - if (!modal) return; - const titleEl = document.getElementById('dashboard-detail-modal-title'); - const tbody = document.getElementById('dashboard-detail-tbody'); - if (!titleEl || !tbody) return; - const thead = tbody.closest('table')?.querySelector('thead'); - if (!thead) return; - - titleEl.textContent = title; - thead.innerHTML = `No유형법인제품명수량금액`; - tbody.innerHTML = ''; - list.forEach((sw, idx) => { - const tr = document.createElement('tr'); - tr.innerHTML = `${idx+1}${sw.type}${sw.법인}${sw.제품명}${sw.수량}${sw.금액}`; - tbody.appendChild(tr); - }); - modal.classList.remove('hidden'); -} - -export function openSwUsageDetail(title: string, list: SoftwareAsset[]) { - const modal = document.getElementById('dashboard-detail-modal'); - if (!modal) return; - const titleEl = document.getElementById('dashboard-detail-modal-title'); - const tbody = document.getElementById('dashboard-detail-tbody'); - if (!titleEl || !tbody) return; - const thead = tbody.closest('table')?.querySelector('thead'); - if (!thead) return; - - titleEl.textContent = title; - thead.innerHTML = `No법인제품명수량사용중사용가능`; - tbody.innerHTML = ''; - list.forEach((sw, idx) => { - const assigned = state.masterData.swUsers.filter(u => u.swId === sw.id).length; - const qty = typeof sw.수량 === 'number' ? sw.수량 : parseInt(sw.수량||'0', 10); - const avail = qty - assigned; - const tr = document.createElement('tr'); - tr.innerHTML = `${idx+1}${sw.법인}${sw.제품명}${qty}${assigned}${avail}`; - tbody.appendChild(tr); - }); - modal.classList.remove('hidden'); -} diff --git a/backup_refactor/src/components/Modal/HWModal.ts b/backup_refactor/src/components/Modal/HWModal.ts deleted file mode 100644 index a330711..0000000 --- a/backup_refactor/src/components/Modal/HWModal.ts +++ /dev/null @@ -1,335 +0,0 @@ -import { state } from '../../core/state'; -import { HardwareAsset } from '../../core/excelHandler'; -import { renderTable } from '../../views/AssetTableView'; -import { createIcons, Paperclip } from 'lucide'; - -let currentAsset: HardwareAsset | null = null; -let isEditMode = false; - -const HW_MODAL_HTML = ` - -`; - -export function openHwModal(asset: HardwareAsset) { - currentAsset = asset; - isEditMode = false; - - const modal = document.getElementById('hw-asset-modal')!; - const form = document.getElementById('hw-asset-form') as HTMLFormElement; - const saveBtn = document.getElementById('btn-save-hw-asset')!; - const revertBtn = document.getElementById('btn-revert-hw-edit')!; - - form.reset(); - form.classList.remove('is-edit-mode'); - form.classList.add('is-view-mode'); - saveBtn.textContent = '수정'; - revertBtn.classList.add('hidden'); - - fillHwFormData(asset); - - modal.classList.remove('hidden'); - createIcons({ icons: { Paperclip } }); -} - -function fillHwFormData(asset: HardwareAsset) { - (document.getElementById('hw-asset-id') as HTMLInputElement).value = asset.id; - (document.getElementById('hw-asset-type') as HTMLInputElement).value = asset.type; - (document.getElementById('hw-법인') as HTMLInputElement).value = asset.법인; - (document.getElementById('hw-자산코드') as HTMLInputElement).value = asset.자산코드; - (document.getElementById('hw-위치') as HTMLInputElement).value = asset.위치; - (document.getElementById('hw-모델명') as HTMLInputElement).value = asset.모델명 || ''; - (document.getElementById('hw-OS') as HTMLInputElement).value = asset.OS || ''; - (document.getElementById('hw-CPU') as HTMLInputElement).value = asset.CPU || ''; - (document.getElementById('hw-RAM') as HTMLInputElement).value = asset.RAM || ''; - (document.getElementById('hw-SSD1') as HTMLInputElement).value = asset.SSD1 || ''; - (document.getElementById('hw-SSD2') as HTMLInputElement).value = asset.SSD2 || ''; - (document.getElementById('hw-담당자_정') as HTMLInputElement).value = asset.담당자_정 || asset.관리자 || ''; - (document.getElementById('hw-담당자_부') as HTMLInputElement).value = asset.담당자_부 || ''; - (document.getElementById('hw-품의서명') as HTMLElement).textContent = asset.품의서명 || ''; - - const serverOnly = document.querySelectorAll('.server-only'); - const nonServer = document.querySelectorAll('.non-server'); - const equipGroup = document.getElementById('hw-비품유형-group')!; - - if (asset.type === '서버') { - serverOnly.forEach(el => (el as HTMLElement).style.display = 'flex'); - nonServer.forEach(el => (el as HTMLElement).style.display = 'none'); - equipGroup.style.display = 'none'; - - (document.getElementById('hw-용도') as HTMLInputElement).value = asset.용도 || ''; - (document.getElementById('hw-상세') as HTMLInputElement).value = asset.상세 || ''; - (document.getElementById('hw-비고') as HTMLInputElement).value = asset.비고 || ''; - (document.getElementById('hw-IP주소') as HTMLInputElement).value = asset.IP주소 || ''; - (document.getElementById('hw-IP2') as HTMLInputElement).value = (asset as any).IP2 || ''; - (document.getElementById('hw-원격접속') as HTMLInputElement).value = asset.원격접속 || ''; - (document.getElementById('hw-서버ID') as HTMLInputElement).value = (asset as any).서버ID || ''; - (document.getElementById('hw-서버PW') as HTMLInputElement).value = (asset as any).서버PW || ''; - (document.getElementById('hw-모니터링') as HTMLInputElement).value = asset.모니터링 || ''; - } else { - serverOnly.forEach(el => (el as HTMLElement).style.display = 'none'); - nonServer.forEach(el => (el as HTMLElement).style.display = 'flex'); - - (document.getElementById('hw-명칭') as HTMLInputElement).value = asset.명칭 || ''; - (document.getElementById('hw-구매일') as HTMLInputElement).value = asset.구매일 || ''; - (document.getElementById('hw-금액') as HTMLInputElement).value = asset.금액 || ''; - (document.getElementById('hw-HW사양') as HTMLTextAreaElement).value = asset.HW사양 || ''; - (document.getElementById('hw-IP주소-non-server') as HTMLInputElement).value = asset.IP주소 || ''; - - if (asset.type === '전산비품') { - equipGroup.style.display = 'flex'; - (document.getElementById('hw-비품유형') as HTMLSelectElement).value = asset.비품유형 || '노트북'; - } else { - equipGroup.style.display = 'none'; - } - } -} - -export function initHwModal() { - // HTML 주입 - if (!document.getElementById('hw-asset-modal')) { - document.body.insertAdjacentHTML('beforeend', HW_MODAL_HTML); - } - - const modal = document.getElementById('hw-asset-modal')!; - const form = document.getElementById('hw-asset-form') as HTMLFormElement; - const closeBtn = document.getElementById('btn-close-hw-modal')!; - const cancelBtn = document.getElementById('btn-cancel-hw-modal')!; - const saveBtn = document.getElementById('btn-save-hw-asset')!; - const revertBtn = document.getElementById('btn-revert-hw-edit')!; - const deleteBtn = document.getElementById('btn-delete-hw-asset')!; - - const closeModal = () => { - modal.classList.add('hidden'); - isEditMode = false; - }; - - const switchToViewMode = () => { - isEditMode = false; - form.classList.remove('is-edit-mode'); - form.classList.add('is-view-mode'); - saveBtn.textContent = '수정'; - revertBtn.classList.add('hidden'); - if (currentAsset) fillHwFormData(currentAsset); - }; - - closeBtn.addEventListener('click', closeModal); - cancelBtn.addEventListener('click', closeModal); - modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); - revertBtn.addEventListener('click', () => { switchToViewMode(); }); - - saveBtn.addEventListener('click', () => { - if (!currentAsset) return; - - if (!isEditMode) { - isEditMode = true; - form.classList.remove('is-view-mode'); - form.classList.add('is-edit-mode'); - saveBtn.textContent = '저장'; - revertBtn.classList.remove('hidden'); - return; - } - - const assetId = (document.getElementById('hw-asset-id') as HTMLInputElement).value; - const type = (document.getElementById('hw-asset-type') as HTMLInputElement).value; - - const updated: HardwareAsset = { - ...currentAsset, - 법인: (document.getElementById('hw-법인') as HTMLInputElement).value, - 자산코드: (document.getElementById('hw-자산코드') as HTMLInputElement).value, - 위치: (document.getElementById('hw-위치') as HTMLInputElement).value, - 모델명: (document.getElementById('hw-모델명') as HTMLInputElement).value, - OS: (document.getElementById('hw-OS') as HTMLInputElement).value, - CPU: (document.getElementById('hw-CPU') as HTMLInputElement).value, - RAM: (document.getElementById('hw-RAM') as HTMLInputElement).value, - SSD1: (document.getElementById('hw-SSD1') as HTMLInputElement).value, - SSD2: (document.getElementById('hw-SSD2') as HTMLInputElement).value, - 담당자_정: (document.getElementById('hw-담당자_정') as HTMLInputElement).value, - 관리자: (document.getElementById('hw-담당자_정') as HTMLInputElement).value, - 담당자_부: (document.getElementById('hw-담당자_부') as HTMLInputElement).value, - }; - - if (type === '서버') { - updated.용도 = (document.getElementById('hw-용도') as HTMLInputElement).value; - updated.상세 = (document.getElementById('hw-상세') as HTMLInputElement).value; - updated.비고 = (document.getElementById('hw-비고') as HTMLInputElement).value; - updated.IP주소 = (document.getElementById('hw-IP주소') as HTMLInputElement).value; - (updated as any).IP2 = (document.getElementById('hw-IP2') as HTMLInputElement).value; - updated.원격접속 = (document.getElementById('hw-원격접속') as HTMLInputElement).value; - (updated as any).서버ID = (document.getElementById('hw-서버ID') as HTMLInputElement).value; - (updated as any).서버PW = (document.getElementById('hw-서버PW') as HTMLInputElement).value; - updated.모니터링 = (document.getElementById('hw-모니터링') as HTMLInputElement).value; - } else { - updated.명칭 = (document.getElementById('hw-명칭') as HTMLInputElement).value; - updated.구매일 = (document.getElementById('hw-구매일') as HTMLInputElement).value; - updated.금액 = (document.getElementById('hw-금액') as HTMLInputElement).value; - updated.HW사양 = (document.getElementById('hw-HW사양') as HTMLTextAreaElement).value; - updated.IP주소 = (document.getElementById('hw-IP주소-non-server') as HTMLInputElement).value; - - if (type === '전산비품') { - updated.비품유형 = (document.getElementById('hw-비품유형') as HTMLSelectElement).value; - } - } - - const idx = state.masterData.hw.findIndex(a => a.id === assetId); - if (idx > -1) { - state.masterData.hw[idx] = updated; - renderTable(document.getElementById('main-content')!); - switchToViewMode(); - } - }); - - deleteBtn.addEventListener('click', () => { - if (!currentAsset) return; - if (confirm('정말로 이 자산을 삭제하시겠습니까?')) { - state.masterData.hw = state.masterData.hw.filter(a => a.id !== currentAsset!.id); - renderTable(document.getElementById('main-content')!); - closeModal(); - } - }); -} diff --git a/backup_refactor/src/components/Modal/PCModal.ts b/backup_refactor/src/components/Modal/PCModal.ts deleted file mode 100644 index 0061d71..0000000 --- a/backup_refactor/src/components/Modal/PCModal.ts +++ /dev/null @@ -1,342 +0,0 @@ -import { state } from '../../core/state'; -import { HardwareAsset, HardwareLog } from '../../core/excelHandler'; -import { openModal } from './BaseModal'; - -const PC_MODAL_HTML = ` - -`; - -export function initPcModal(renderContent: () => void, closeModals: () => void) { - if (!document.getElementById('pc-asset-modal')) { - document.body.insertAdjacentHTML('beforeend', PC_MODAL_HTML); - } - - const pcForm = document.getElementById('pc-asset-form') as HTMLFormElement; - const btnRevertEdit = document.getElementById('btn-revert-pc-edit') as HTMLButtonElement; - const btnSavePc = document.getElementById('btn-save-pc-asset') as HTMLButtonElement; - const btnDeletePc = document.getElementById('btn-delete-pc-asset') as HTMLButtonElement; - const btnCloseHeader = document.getElementById('btn-close-pc-modal') as HTMLButtonElement; - const btnCloseFooter = document.getElementById('btn-close-pc-footer') as HTMLButtonElement; - - let isEditMode = false; - let currentAsset: HardwareAsset | null = null; - - const setEditMode = (edit: boolean) => { - isEditMode = edit; - if (edit) { - pcForm.classList.add('is-edit-mode'); - pcForm.classList.remove('is-view-mode'); - btnSavePc.textContent = '저장'; - btnRevertEdit.classList.remove('hidden'); - btnCloseFooter.classList.add('hidden'); - } else { - pcForm.classList.add('is-view-mode'); - pcForm.classList.remove('is-edit-mode'); - btnSavePc.textContent = '수정'; - btnRevertEdit.classList.add('hidden'); - btnCloseFooter.classList.remove('hidden'); - if (currentAsset) fillFormData(currentAsset); - } - }; - - function fillFormData(asset: HardwareAsset) { - (document.getElementById('pc-asset-id') as HTMLInputElement).value = asset.id; - (document.getElementById('pc-법인') as HTMLSelectElement).value = asset.법인; - (document.getElementById('pc-자산코드') as HTMLInputElement).value = asset.자산코드; - (document.getElementById('pc-사용자') as HTMLInputElement).value = asset.사용자 || ''; - (document.getElementById('pc-위치') as HTMLInputElement).value = asset.위치 || ''; - (document.getElementById('pc-CPU') as HTMLInputElement).value = asset.CPU || ''; - (document.getElementById('pc-GPU') as HTMLInputElement).value = asset.GPU || ''; - (document.getElementById('pc-RAM') as HTMLInputElement).value = asset.RAM || ''; - (document.getElementById('pc-SSD1') as HTMLInputElement).value = asset.SSD1 || ''; - (document.getElementById('pc-SSD2') as HTMLInputElement).value = asset.SSD2 || ''; - (document.getElementById('pc-HDD1') as HTMLInputElement).value = asset.HDD1 || ''; - (document.getElementById('pc-HDD2') as HTMLInputElement).value = asset.HDD2 || ''; - (document.getElementById('pc-구매일') as HTMLInputElement).value = asset.구매일 || ''; - (document.getElementById('pc-금액') as HTMLInputElement).value = asset.금액 || ''; - (document.getElementById('pc-납품업체') as HTMLInputElement).value = asset.납품업체 || ''; - (document.getElementById('pc-품의서명') as HTMLElement).innerText = asset.품의서명 ? `첨부: ${asset.품의서명}` : ''; - } - - btnRevertEdit?.addEventListener('click', () => setEditMode(false)); - btnCloseHeader?.addEventListener('click', closeModals); - btnCloseFooter?.addEventListener('click', closeModals); - - btnSavePc?.addEventListener('click', (e) => { - e.preventDefault(); - if (!isEditMode) { - setEditMode(true); - return; - } - - if (!pcForm.checkValidity()) { pcForm.reportValidity(); return; } - - // ... (저장 로직 유지) - e.preventDefault(); - if (!pcForm.checkValidity()) { pcForm.reportValidity(); return; } - - const id = (document.getElementById('pc-asset-id') as HTMLInputElement).value; - const fileInput = document.getElementById('pc-품의서') as HTMLInputElement; - const 품의서명 = fileInput.files && fileInput.files.length > 0 ? fileInput.files[0].name : (document.getElementById('pc-품의서명') as HTMLElement).innerText.replace('첨부: ', ''); - - const newAsset: HardwareAsset = { - id: id || Math.random().toString(36).substring(2, 9), - type: '개인PC', - 법인: (document.getElementById('pc-법인') as HTMLSelectElement).value, - 자산코드: (document.getElementById('pc-자산코드') as HTMLInputElement).value, - 명칭: '', - 위치: (document.getElementById('pc-위치') as HTMLInputElement).value, - 관리자: '', IP주소: '', MACaddress: '', HW사양: '', OS: '', 납품업체: (document.getElementById('pc-납품업체') as HTMLInputElement).value, - 사용자: (document.getElementById('pc-사용자') as HTMLInputElement).value, - CPU: (document.getElementById('pc-CPU') as HTMLInputElement).value, - GPU: (document.getElementById('pc-GPU') as HTMLInputElement).value, - RAM: (document.getElementById('pc-RAM') as HTMLInputElement).value, - SSD1: (document.getElementById('pc-SSD1') as HTMLInputElement).value, - SSD2: (document.getElementById('pc-SSD2') as HTMLInputElement).value, - HDD1: (document.getElementById('pc-HDD1') as HTMLInputElement).value, - HDD2: (document.getElementById('pc-HDD2') as HTMLInputElement).value, - 구매일: (document.getElementById('pc-구매일') as HTMLInputElement).value, - 금액: (document.getElementById('pc-금액') as HTMLInputElement).value, - 품의서명 - }; - - if (id) { - const idx = state.masterData.hw.findIndex(a => a.id === id); - if(idx !== -1) { - const oldAsset = state.masterData.hw[idx]; - const changes = getChangeDetails(oldAsset, newAsset); - if (changes) { - state.masterData.logs.push({ - id: Math.random().toString(36).substring(2, 9), - assetId: id, - date: new Date().toLocaleString(), - details: changes, - user: '관리자' - }); - } - state.masterData.hw[idx] = newAsset; - } - } else { - state.masterData.hw.push(newAsset); - } - - closeModals(); - renderContent(); - }); - - btnDeletePc?.addEventListener('click', (e) => { - e.preventDefault(); - const id = (document.getElementById('pc-asset-id') as HTMLInputElement).value; - if (confirm('삭제하시겠습니까?')) { - state.masterData.hw = state.masterData.hw.filter(a => a.id !== id); - closeModals(); - renderContent(); - } - }); -} - -export function openPcModal(asset?: HardwareAsset) { - const pcForm = document.getElementById('pc-asset-form') as HTMLFormElement; - const deleteBtn = document.getElementById('btn-delete-pc-asset')!; - const historyArea = document.querySelector('.modal-history-area') as HTMLElement; - - openModal('pc-asset-modal'); - pcForm.reset(); - - if (asset) { - document.getElementById('pc-modal-title')!.textContent = '개인PC 상세 정보 수정'; - deleteBtn.style.display = 'block'; - if (historyArea) historyArea.style.display = 'flex'; - - (document.getElementById('pc-asset-id') as HTMLInputElement).value = asset.id; - (document.getElementById('pc-법인') as HTMLSelectElement).value = asset.법인; - (document.getElementById('pc-자산코드') as HTMLInputElement).value = asset.자산코드; - (document.getElementById('pc-사용자') as HTMLInputElement).value = asset.사용자 || ''; - (document.getElementById('pc-위치') as HTMLInputElement).value = asset.위치 || ''; - (document.getElementById('pc-CPU') as HTMLInputElement).value = asset.CPU || ''; - (document.getElementById('pc-GPU') as HTMLInputElement).value = asset.GPU || ''; - (document.getElementById('pc-RAM') as HTMLInputElement).value = asset.RAM || ''; - (document.getElementById('pc-SSD1') as HTMLInputElement).value = asset.SSD1 || ''; - (document.getElementById('pc-SSD2') as HTMLInputElement).value = asset.SSD2 || ''; - (document.getElementById('pc-HDD1') as HTMLInputElement).value = asset.HDD1 || ''; - (document.getElementById('pc-HDD2') as HTMLInputElement).value = asset.HDD2 || ''; - (document.getElementById('pc-구매일') as HTMLInputElement).value = asset.구매일 || ''; - (document.getElementById('pc-금액') as HTMLInputElement).value = asset.금액 || ''; - (document.getElementById('pc-납품업체') as HTMLInputElement).value = asset.납품업체 || ''; - (document.getElementById('pc-품의서명') as HTMLElement).innerText = asset.품의서명 ? `첨부: ${asset.품의서명}` : ''; - - renderHistory(asset.id); - } else { - document.getElementById('pc-modal-title')!.textContent = '신규 개인PC 자산 추가'; - deleteBtn.style.display = 'none'; - if (historyArea) historyArea.style.display = 'none'; - - (document.getElementById('pc-asset-id') as HTMLInputElement).value = ''; - (document.getElementById('pc-법인') as HTMLSelectElement).value = '한맥'; - (document.getElementById('pc-품의서명') as HTMLElement).innerText = ''; - } -} - -function getChangeDetails(oldAsset: HardwareAsset, newAsset: HardwareAsset): string { - const changes: string[] = []; - const fields = [ - { key: '법인', label: '법인' }, - { key: '자산코드', label: '자산코드' }, - { key: '사용자', label: '사용자' }, - { key: '위치', label: '위치' }, - { key: 'CPU', label: 'CPU' }, - { key: 'GPU', label: 'GPU' }, - { key: 'RAM', label: 'RAM' }, - { key: 'SSD1', label: 'SSD1' }, - { key: 'SSD2', label: 'SSD2' }, - { key: 'HDD1', label: 'HDD1' }, - { key: 'HDD2', label: 'HDD2' }, - { key: '구매일', label: '구매일' }, - { key: '금액', label: '금액' }, - { key: '납품업체', label: '납품업체' }, - { key: '품의서명', label: '품의서' }, - ]; - - fields.forEach(field => { - const oldVal = (oldAsset as any)[field.key] || ''; - const newVal = (newAsset as any)[field.key] || ''; - if (oldVal !== newVal) { - changes.push(`${field.label}: ${oldVal || '없음'} → ${newVal || '없음'}`); - } - }); - return changes.join('\n'); -} - -function renderHistory(assetId: string) { - const historyList = document.getElementById('pc-history-list'); - if (!historyList) return; - - const logs = state.masterData.logs - .filter(l => l.assetId === assetId) - .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); - - if (logs.length === 0) { - historyList.innerHTML = '
이력이 없습니다.
'; - return; - } - - historyList.innerHTML = logs.map(log => ` -
-
${log.date}
-
수정자: ${log.user}
-
${log.details.replace(/\\n/g, '
')}
-
- `).join(''); -} diff --git a/backup_refactor/src/components/Modal/SWModal.ts b/backup_refactor/src/components/Modal/SWModal.ts deleted file mode 100644 index ecfb78f..0000000 --- a/backup_refactor/src/components/Modal/SWModal.ts +++ /dev/null @@ -1,222 +0,0 @@ -import { state } from '../../core/state'; -import { SoftwareAsset } from '../../core/excelHandler'; -import { openModal } from './BaseModal'; - -const SW_MODAL_HTML = ` - -`; - -export function initSwModal(renderContent: () => void, closeModals: () => void) { - if (!document.getElementById('sw-asset-modal')) { - document.body.insertAdjacentHTML('beforeend', SW_MODAL_HTML); - } - - const swForm = document.getElementById('sw-asset-form') as HTMLFormElement; - const btnRevertEdit = document.getElementById('btn-revert-sw-edit') as HTMLButtonElement; - const btnSaveSw = document.getElementById('btn-save-sw-asset') as HTMLButtonElement; - const btnDeleteSw = document.getElementById('btn-delete-sw-asset') as HTMLButtonElement; - const btnCloseHeader = document.getElementById('btn-close-sw-modal') as HTMLButtonElement; - const btnCloseFooter = document.getElementById('btn-close-sw-footer') as HTMLButtonElement; - - let isEditMode = false; - let currentAsset: SoftwareAsset | null = null; - - const setEditMode = (edit: boolean) => { - isEditMode = edit; - if (edit) { - swForm.classList.add('is-edit-mode'); - swForm.classList.remove('is-view-mode'); - btnSaveSw.textContent = '저장'; - btnRevertEdit.classList.remove('hidden'); - btnCloseFooter.classList.add('hidden'); - } else { - swForm.classList.add('is-view-mode'); - swForm.classList.remove('is-edit-mode'); - btnSaveSw.textContent = '수정'; - btnRevertEdit.classList.add('hidden'); - btnCloseFooter.classList.remove('hidden'); - if (currentAsset) fillFormData(currentAsset); - } - }; - - function fillFormData(asset: SoftwareAsset) { - (document.getElementById('sw-asset-id') as HTMLInputElement).value = asset.id; - (document.getElementById('sw-asset-type') as HTMLInputElement).value = asset.type; - (document.getElementById('sw-분야') as HTMLSelectElement).value = asset.분야 || '업무공통'; - (document.getElementById('sw-법인') as HTMLSelectElement).value = asset.법인; - (document.getElementById('sw-부서') as HTMLInputElement).value = asset.부서 || ''; - (document.getElementById('sw-제품명') as HTMLInputElement).value = asset.제품명; - (document.getElementById('sw-구매일') as HTMLInputElement).value = asset.구매일 || ''; - (document.getElementById('sw-구독일') as HTMLInputElement).value = asset.구독일 || ''; - (document.getElementById('sw-유지보수여부') as HTMLInputElement).checked = !!asset.유지보수여부; - (document.getElementById('sw-금액') as HTMLInputElement).value = asset.금액 || ''; - (document.getElementById('sw-수량') as HTMLInputElement).value = String(asset.수량); - (document.getElementById('sw-계정명') as HTMLInputElement).value = asset.계정명 || ''; - (document.getElementById('sw-납품업체') as HTMLInputElement).value = asset.납품업체 || ''; - (document.getElementById('sw-비고') as HTMLInputElement).value = asset.비고 || ''; - } - - btnRevertEdit?.addEventListener('click', () => setEditMode(false)); - btnCloseHeader?.addEventListener('click', closeModals); - btnCloseFooter?.addEventListener('click', closeModals); - - btnSaveSw?.addEventListener('click', (e) => { - e.preventDefault(); - if (!isEditMode) { - setEditMode(true); - return; - } - - if (!swForm.checkValidity()) { swForm.reportValidity(); return; } - - const id = (document.getElementById('sw-asset-id') as HTMLInputElement).value; - const newAsset: SoftwareAsset = { - id: id || Math.random().toString(36).substring(2, 9), - type: (document.getElementById('sw-asset-type') as HTMLInputElement).value, - 분야: (document.getElementById('sw-분야') as HTMLSelectElement).value, - 법인: (document.getElementById('sw-법인') as HTMLSelectElement).value, - 부서: (document.getElementById('sw-부서') as HTMLInputElement).value, - 제품명: (document.getElementById('sw-제품명') as HTMLInputElement).value, - 구매일: (document.getElementById('sw-구매일') as HTMLInputElement).value, - 구독일: (document.getElementById('sw-구독일') as HTMLInputElement).value, - 유지보수여부: (document.getElementById('sw-유지보수여부') as HTMLInputElement).checked, - 금액: (document.getElementById('sw-금액') as HTMLInputElement).value, - 수량: parseInt((document.getElementById('sw-수량') as HTMLInputElement).value || '1', 10), - 계정명: (document.getElementById('sw-계정명') as HTMLInputElement).value, - 납품업체: (document.getElementById('sw-납품업체') as HTMLInputElement).value, - 비고: (document.getElementById('sw-비고') as HTMLInputElement).value, - }; - - if (id) { - const idx = state.masterData.sw.findIndex(a => a.id === id); - if(idx !== -1) state.masterData.sw[idx] = newAsset; - } else { - state.masterData.sw.push(newAsset); - } - - closeModals(); - renderContent(); - }); - - btnDeleteSw?.addEventListener('click', (e) => { - e.preventDefault(); - const id = (document.getElementById('sw-asset-id') as HTMLInputElement).value; - if (confirm('삭제하시겠습니까?')) { - state.masterData.sw = state.masterData.sw.filter(a => a.id !== id); - closeModals(); - renderContent(); - } - }); -} - -export function openSwModal(asset?: SoftwareAsset) { - currentAsset = asset || null; - const swForm = document.getElementById('sw-asset-form') as HTMLFormElement; - const deleteBtn = document.getElementById('btn-delete-sw-asset')!; - - openModal('sw-asset-modal'); - swForm.reset(); - - const subGroup = document.getElementById('sw-구독일-group')!; - const permGroup = document.getElementById('sw-유지보수-group')!; - if (state.activeSubTab === '구독SW') { - subGroup.style.display = 'flex'; - permGroup.style.display = 'none'; - } else { - subGroup.style.display = 'none'; - permGroup.style.display = 'flex'; - } - - if (asset) { - document.getElementById('sw-modal-title')!.textContent = `${state.activeSubTab} 상세 정보 수정`; - deleteBtn.style.display = 'block'; - fillFormData(asset); - setEditMode(false); - } else { - document.getElementById('sw-modal-title')!.textContent = `신규 ${state.activeSubTab} 자산 추가`; - deleteBtn.style.display = 'none'; - (document.getElementById('sw-asset-id') as HTMLInputElement).value = ''; - (document.getElementById('sw-asset-type') as HTMLInputElement).value = state.activeSubTab; - setEditMode(true); - } -} diff --git a/backup_refactor/src/components/Modal/SWUserModal.ts b/backup_refactor/src/components/Modal/SWUserModal.ts deleted file mode 100644 index f4f0668..0000000 --- a/backup_refactor/src/components/Modal/SWUserModal.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { state } from '../../core/state'; -import { SoftwareAsset, SWUser } from '../../core/excelHandler'; -import { openModal } from './BaseModal'; -import { createIcons, Edit2, X, Paperclip } from 'lucide'; - -let currentSwUserAssetId: string = ''; -let tempSwUsers: SWUser[] = []; - -const SW_USER_MODAL_HTML = ` - - - - - -`; - -export function initSwUserModal(renderContent: () => void, closeModals: () => void) { - if (!document.getElementById('sw-user-modal')) { - document.body.insertAdjacentHTML('beforeend', SW_USER_MODAL_HTML); - } - - const btnOpenAddUser = document.getElementById('btn-open-add-user'); - const btnSaveEditUser = document.getElementById('btn-save-edit-user'); - const btnSaveSwUserMapping = document.getElementById('btn-save-sw-user-mapping'); - const btnCancelUserEdit = document.getElementById('btn-cancel-sw-user-edit'); - const btnCloseUserEdit = document.getElementById('btn-close-sw-user-edit'); - const btnCancelUserModal = document.getElementById('btn-cancel-sw-user-modal'); - const btnCloseUserModal = document.getElementById('btn-close-sw-user-modal'); - - btnOpenAddUser?.addEventListener('click', () => openUserEditModal(-1)); - btnSaveEditUser?.addEventListener('click', () => saveUserEdit()); - - btnSaveSwUserMapping?.addEventListener('click', () => { - state.masterData.swUsers = state.masterData.swUsers.filter(u => u.swId !== currentSwUserAssetId); - state.masterData.swUsers.push(...tempSwUsers); - document.getElementById('sw-user-modal')?.classList.add('hidden'); - renderContent(); - }); - - btnCancelUserEdit?.addEventListener('click', () => document.getElementById('sw-user-edit-modal')?.classList.add('hidden')); - btnCloseUserEdit?.addEventListener('click', () => document.getElementById('sw-user-edit-modal')?.classList.add('hidden')); - btnCancelUserModal?.addEventListener('click', () => document.getElementById('sw-user-modal')?.classList.add('hidden')); - btnCloseUserModal?.addEventListener('click', () => document.getElementById('sw-user-modal')?.classList.add('hidden')); -} - -function renderUserList() { - const tbody = document.getElementById('user-list-body')!; - tbody.innerHTML = ''; - if (tempSwUsers.length === 0) { - tbody.innerHTML = '할당된 사용자가 없습니다.'; - return; - } - - tempSwUsers.forEach((user, idx) => { - const tr = document.createElement('tr'); - const deptTeam = [user.부서, user.팀].filter(Boolean).join(' / ') || '-'; - const attachIcon = user.신청서명 ? `` : '-'; - - tr.innerHTML = ` - ${user.법인} - ${deptTeam} - ${user.직위 || '-'} - ${user.이름} - ${user.사용기간 || '-'} - ${attachIcon} - - - - - `; - tbody.appendChild(tr); - }); - - createIcons({ icons: { Edit2, X, Paperclip } }); - - tbody.querySelectorAll('.btn-edit-user').forEach(btn => { - btn.addEventListener('click', (e) => { - const idx = parseInt((e.currentTarget as HTMLElement).getAttribute('data-idx')!); - openUserEditModal(idx); - }); - }); - - tbody.querySelectorAll('.btn-remove-user').forEach(btn => { - btn.addEventListener('click', (e) => { - const idx = parseInt((e.currentTarget as HTMLButtonElement).getAttribute('data-idx')!); - tempSwUsers.splice(idx, 1); - renderUserList(); - }); - }); -} - -export function openSwUserModal(asset: SoftwareAsset) { - openModal('sw-user-modal'); - currentSwUserAssetId = asset.id; - tempSwUsers = state.masterData.swUsers.filter(u => u.swId === asset.id).map(u => ({...u})); - renderUserList(); -} - -function openUserEditModal(idx: number) { - const editModal = document.getElementById('sw-user-edit-modal')!; - editModal.classList.remove('hidden'); - (document.getElementById('edit-user-idx') as HTMLInputElement).value = String(idx); - - if (idx === -1) { - document.getElementById('sw-user-edit-modal-title')!.innerText = '새 사용자 추가'; - (document.getElementById('new-user-법인') as HTMLSelectElement).value = '한맥'; - (document.getElementById('new-user-부서') as HTMLInputElement).value = ''; - (document.getElementById('new-user-팀') as HTMLInputElement).value = ''; - (document.getElementById('new-user-직위') as HTMLInputElement).value = ''; - (document.getElementById('new-user-이름') as HTMLInputElement).value = ''; - (document.getElementById('new-user-사용기간') as HTMLInputElement).value = ''; - (document.getElementById('new-user-신청서') as HTMLInputElement).value = ''; - document.getElementById('new-user-신청서명')!.innerText = ''; - } else { - document.getElementById('sw-user-edit-modal-title')!.innerText = '사용자 정보 수정'; - const u = tempSwUsers[idx]; - (document.getElementById('new-user-법인') as HTMLSelectElement).value = u.법인; - (document.getElementById('new-user-부서') as HTMLInputElement).value = u.부서; - (document.getElementById('new-user-팀') as HTMLInputElement).value = u.팀; - (document.getElementById('new-user-직위') as HTMLInputElement).value = u.직위; - (document.getElementById('new-user-이름') as HTMLInputElement).value = u.이름; - (document.getElementById('new-user-사용기간') as HTMLInputElement).value = u.사용기간; - (document.getElementById('new-user-신청서') as HTMLInputElement).value = ''; - document.getElementById('new-user-신청서명')!.innerText = u.신청서명 ? `첨부: ${u.신청서명}` : ''; - } -} - -function saveUserEdit() { - const idx = parseInt((document.getElementById('edit-user-idx') as HTMLInputElement).value); - const 이름 = (document.getElementById('new-user-이름') as HTMLInputElement).value.trim(); - if (!이름) { alert('이름을 입력해주세요.'); return; } - - const fileInput = document.getElementById('new-user-신청서') as HTMLInputElement; - let 신청서명 = ''; - if (fileInput.files && fileInput.files.length > 0) { - 신청서명 = fileInput.files[0].name; - } else if (idx !== -1) { - 신청서명 = tempSwUsers[idx].신청서명; - } - - const userData: SWUser = { - id: idx === -1 ? Math.random().toString(36).substring(2, 9) : tempSwUsers[idx].id, - swId: currentSwUserAssetId, - 법인: (document.getElementById('new-user-법인') as HTMLSelectElement).value, - 부서: (document.getElementById('new-user-부서') as HTMLInputElement).value, - 팀: (document.getElementById('new-user-팀') as HTMLInputElement).value, - 직위: (document.getElementById('new-user-직위') as HTMLInputElement).value, - 이름, - 사용기간: (document.getElementById('new-user-사용기간') as HTMLInputElement).value, - 신청서명 - }; - - if (idx === -1) tempSwUsers.push(userData); - else tempSwUsers[idx] = userData; - - document.getElementById('sw-user-edit-modal')?.classList.add('hidden'); - renderUserList(); -} diff --git a/backup_refactor/src/components/Modal/StorageModal.ts b/backup_refactor/src/components/Modal/StorageModal.ts deleted file mode 100644 index 1a88b70..0000000 --- a/backup_refactor/src/components/Modal/StorageModal.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { state } from '../../core/state'; -import { HardwareAsset } from '../../core/excelHandler'; -import { openModal } from './BaseModal'; - -const STORAGE_MODAL_HTML = ` - -`; - -export function initStorageModal(renderContent: () => void, closeModals: () => void) { - if (!document.getElementById('storage-asset-modal')) { - document.body.insertAdjacentHTML('beforeend', STORAGE_MODAL_HTML); - } - - const storageForm = document.getElementById('storage-asset-form') as HTMLFormElement; - const btnRevertEdit = document.getElementById('btn-revert-storage-edit') as HTMLButtonElement; - const btnSaveStorage = document.getElementById('btn-save-storage-asset') as HTMLButtonElement; - const btnDeleteStorage = document.getElementById('btn-delete-storage-asset') as HTMLButtonElement; - const btnCloseHeader = document.getElementById('btn-close-storage-modal') as HTMLButtonElement; - const btnCloseFooter = document.getElementById('btn-close-storage-footer') as HTMLButtonElement; - - let isEditMode = false; - let currentAsset: HardwareAsset | null = null; - - const setEditMode = (edit: boolean) => { - isEditMode = edit; - if (edit) { - storageForm.classList.add('is-edit-mode'); - storageForm.classList.remove('is-view-mode'); - btnSaveStorage.textContent = '저장'; - btnRevertEdit.classList.remove('hidden'); - btnCloseFooter.classList.add('hidden'); - } else { - storageForm.classList.add('is-view-mode'); - storageForm.classList.remove('is-edit-mode'); - btnSaveStorage.textContent = '수정'; - btnRevertEdit.classList.add('hidden'); - btnCloseFooter.classList.remove('hidden'); - if (currentAsset) fillFormData(currentAsset); - } - }; - - function fillFormData(asset: HardwareAsset) { - (document.getElementById('storage-asset-id') as HTMLInputElement).value = asset.id; - (document.getElementById('storage-법인') as HTMLInputElement).value = asset.법인; - (document.getElementById('storage-유형') as HTMLInputElement).value = asset.storage유형 || 'NAS'; - (document.getElementById('storage-자산코드') as HTMLInputElement).value = asset.자산코드; - (document.getElementById('storage-명칭') as HTMLInputElement).value = asset.명칭; - (document.getElementById('storage-위치') as HTMLInputElement).value = asset.위치 || ''; - (document.getElementById('storage-모델명') as HTMLInputElement).value = asset.모델명 || ''; - (document.getElementById('storage-용량') as HTMLInputElement).value = asset.용량 || ''; - (document.getElementById('storage-담당자_정') as HTMLInputElement).value = asset.담당자_정 || ''; - (document.getElementById('storage-IP주소') as HTMLInputElement).value = asset.IP주소 || ''; - (document.getElementById('storage-구매일') as HTMLInputElement).value = asset.구매일 || ''; - (document.getElementById('storage-금액') as HTMLInputElement).value = asset.금액 || ''; - } - - btnRevertEdit?.addEventListener('click', () => setEditMode(false)); - btnCloseHeader?.addEventListener('click', closeModals); - btnCloseFooter?.addEventListener('click', closeModals); - - btnSaveStorage?.addEventListener('click', (e) => { - e.preventDefault(); - if (!isEditMode) { - setEditMode(true); - return; - } - - if (!storageForm.checkValidity()) { storageForm.reportValidity(); return; } - - const id = (document.getElementById('storage-asset-id') as HTMLInputElement).value; - const newAsset: HardwareAsset = { - id: id || Math.random().toString(36).substring(2, 9), - type: '스토리지', - 법인: (document.getElementById('storage-법인') as HTMLInputElement).value, - storage유형: (document.getElementById('storage-유형') as HTMLInputElement).value, - 자산코드: (document.getElementById('storage-자산코드') as HTMLInputElement).value, - 명칭: (document.getElementById('storage-명칭') as HTMLInputElement).value, - 위치: (document.getElementById('storage-위치') as HTMLInputElement).value, - 모델명: (document.getElementById('storage-모델명') as HTMLInputElement).value, - 용량: (document.getElementById('storage-용량') as HTMLInputElement).value, - 담당자_정: (document.getElementById('storage-담당자_정') as HTMLInputElement).value, - IP주소: (document.getElementById('storage-IP주소') as HTMLInputElement).value, - 구매일: (document.getElementById('storage-구매일') as HTMLInputElement).value, - 금액: (document.getElementById('storage-금액') as HTMLInputElement).value, - 관리자: '', MACaddress: '', HW사양: '', OS: '', 납품업체: '', 품의서명: '' - }; - - if (id) { - const idx = state.masterData.hw.findIndex(a => a.id === id); - if(idx !== -1) state.masterData.hw[idx] = newAsset; - } else { - state.masterData.hw.push(newAsset); - } - - closeModals(); - renderContent(); - }); - - btnDeleteStorage?.addEventListener('click', (e) => { - e.preventDefault(); - const id = (document.getElementById('storage-asset-id') as HTMLInputElement).value; - if (confirm('삭제하시겠습니까?')) { - state.masterData.hw = state.masterData.hw.filter(a => a.id !== id); - closeModals(); - renderContent(); - } - }); -} - -export function openStorageModal(asset?: HardwareAsset) { - currentAsset = asset || null; - const storageForm = document.getElementById('storage-asset-form') as HTMLFormElement; - const deleteBtn = document.getElementById('btn-delete-storage-asset')!; - - openModal('storage-asset-modal'); - storageForm.reset(); - - if (asset) { - document.getElementById('storage-modal-title')!.textContent = '스토리지 상세 정보 수정'; - deleteBtn.style.display = 'block'; - fillFormData(asset); - setEditMode(false); - } else { - document.getElementById('storage-modal-title')!.textContent = '신규 스토리지 자산 추가'; - deleteBtn.style.display = 'none'; - (document.getElementById('storage-asset-id') as HTMLInputElement).value = ''; - setEditMode(true); - } -} diff --git a/backup_refactor/src/components/Navigation.ts b/backup_refactor/src/components/Navigation.ts deleted file mode 100644 index 8ed0688..0000000 --- a/backup_refactor/src/components/Navigation.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { state } from '../core/state'; - -const MENU_CONFIG = { - hw: { - label: '하드웨어', - tabs: ['대시보드', '개인PC', '서버', '스토리지', '전산비품'] - }, - sw: { - label: '소프트웨어', - tabs: ['대시보드', '구독SW', '영구SW'] - }, - ops: { - label: '운영 서비스', - tabs: ['대시보드', '서비스현황', '백업관리', '보안점검'] - } -}; - -export function renderNavigation(onTabChange: (tab: string) => void) { - const navContainer = document.getElementById('main-nav')!; - const btnAddAsset = document.getElementById('btn-add-asset') as HTMLButtonElement; - - const render = () => { - navContainer.innerHTML = ''; - - (Object.keys(MENU_CONFIG) as Array).forEach(catKey => { - const config = MENU_CONFIG[catKey]; - const isActive = state.activeCategory === catKey; - - const group = document.createElement('div'); - group.className = `nav-group ${isActive ? 'active is-showing-shelf' : ''}`; - - // 메인 카테고리 트리거 - const trigger = document.createElement('div'); - trigger.className = 'gnb-trigger'; - trigger.textContent = config.label; - - trigger.addEventListener('click', () => { - if (state.activeCategory !== catKey) { - state.activeCategory = catKey; - state.activeSubTab = '대시보드'; - if (btnAddAsset) btnAddAsset.classList.add('hidden'); - render(); - onTabChange('대시보드'); - } - }); - group.appendChild(trigger); - - // 하위 탭 선반 (Shelf) - const shelf = document.createElement('div'); - shelf.className = 'lnb-shelf'; - - config.tabs.forEach(tab => { - const item = document.createElement('div'); - item.className = `lnb-item ${isActive && state.activeSubTab === tab ? 'active' : ''}`; - item.textContent = tab; - - item.addEventListener('click', (e) => { - e.stopPropagation(); - state.activeCategory = catKey; - state.activeSubTab = tab; - - if (btnAddAsset) { - if (tab === '대시보드') btnAddAsset.classList.add('hidden'); - else btnAddAsset.classList.remove('hidden'); - } - - render(); - onTabChange(tab); - }); - shelf.appendChild(item); - }); - group.appendChild(shelf); - - // 마우스 오버 시 다른 그룹의 선반은 가리고 내 것만 보여주는 스타일은 CSS에서 처리함 - navContainer.appendChild(group); - }); - }; - - render(); -} diff --git a/backup_refactor/src/core/dummyDataGenerator.ts b/backup_refactor/src/core/dummyDataGenerator.ts deleted file mode 100644 index 55f3b43..0000000 --- a/backup_refactor/src/core/dummyDataGenerator.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { MasterAssetData, HardwareAsset, SoftwareAsset, SWUser } from './excelHandler'; - -const corps = ['한맥', '삼안', '바론']; -const users = ['홍길동', '김철수', '이영희', '박지훈', '김팀장', '신유진', '윤대웅', '마리아']; -const depts = ['설계팀', '기술팀', '경영지원팀', '영업팀']; - -function rand(arr: any[]) { - return arr[Math.floor(Math.random() * arr.length)]; -} - -function randDate(startYear: number, endYear: number) { - const y = Math.floor(Math.random() * (endYear - startYear + 1)) + startYear; - const m = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); - const d = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); - return `${y}-${m}-${d}`; -} - -function randUser() { // 25% 확률로 유휴자산 할당 - return Math.random() < 0.25 ? '' : rand(users); -} - -export function generateDummyData(): MasterAssetData { - const hw: HardwareAsset[] = []; - const sw: SoftwareAsset[] = []; - const swUsers: SWUser[] = []; - - // 1. 개인PC 50개 - for (let i = 1; i <= 50; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; // 2017~2026 - hw.push({ - id: Math.random().toString(36).substring(2, 9), - type: '개인PC', - 법인: rand(corps), - 자산코드: `HM-PC-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: '', - 위치: `${rand(['본사', '지사'])} ${Math.floor(Math.random()*5)+1}층`, - 사용자: randUser(), - CPU: rand(['i5-10400', 'i7-12700', 'Ryzen 5', 'Ryzen 7']), - GPU: rand(['-', 'GTX 1660', 'RTX 3060', 'RTX 4070']), - RAM: rand(['16GB', '32GB']), - SSD1: rand(['256GB', '512GB', '1TB']), - SSD2: '', - HDD1: rand(['-', '1TB', '2TB']), - HDD2: '', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: String(Math.floor(Math.random()*100 + 50) * 10000).replace(/\B(?=(\d{3})+(?!\d))/g, ','), - 납품업체: rand(['다나와', '컴퓨존', '오피스디포']), - 품의서명: '', - 관리자: '', IP주소: '', MACaddress: '', OS: '', HW사양: '' - }); - } - - // 2. 서버 20개 - for (let i = 1; i <= 20; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; // 2017~2026 - hw.push({ - id: Math.random().toString(36).substring(2, 9), - type: '서버', - 법인: rand(corps), - 자산코드: `HM-SV-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: `웹/DB 서버 #${i}`, - 용도: rand(['웹 서버', 'DB 서버', '백업 서버', '개발 서버']), - storage유형: rand(['물리', 'VM']), - 위치: rand(['IDC 1센터', 'IDC 2센터', '본사 전산실']), - 관리자: rand(users), - 담당자_정: rand(users), - 담당자_부: rand(users), - IP주소: `192.168.10.${i}`, - 원격접속: `ssh://192.168.10.${i}:22`, - MACaddress: '00:11:22:33:44:' + String(i).padStart(2, '0'), - OS: rand(['Windows Server 2019', 'Ubuntu 22.04 LTS', 'CentOS 7']), - 모델명: rand(['Dell PowerEdge R740', 'HP ProLiant DL380', 'Lenovo ThinkSystem']), - CPU: rand(['Xeon Silver 4210', 'Xeon Gold 6248', 'EPYC 7702']), - RAM: rand(['64GB', '128GB', '256GB']), - GPU: rand(['-', 'RTX A4000', 'Tesla V100']), - SSD1: rand(['512GB SSD', '1TB NVMe']), - SSD2: rand(['-', '1TB SSD', '2TB SSD']), - HDD1: rand(['-', '4TB HDD', '8TB HDD']), - 모니터링: rand(['Zabbix', 'Grafana', 'PRTG']), - 비고: i % 5 === 0 ? '정기 점검 대상' : '-', - HW사양: 'Xeon 16Core, 64GB RAM', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '5,000,000', - 납품업체: '서버뱅크', - 품의서명: '' - }); - } - - // 3. 스토리지 20개 - for (let i = 1; i <= 20; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; // 2017~2026 - hw.push({ - id: Math.random().toString(36).substring(2, 9), - type: '스토리지', - 법인: rand(corps), - storage유형: rand(['NAS', 'DAS']), - 자산코드: `HM-ST-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: `백업 스토리지 #${i}`, - 위치: '전산실', - 모델명: rand(['Synology DS920+', 'QNAP TS-453D']), - 용량: rand(['16TB', '32TB', '64TB']), - 담당자_정: randUser(), - 담당자_부: rand(users), - IP주소: `192.168.20.${i}`, - MACaddress: '', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '1,500,000', - 납품업체: '스토리지넷', - 품의서명: '', - 관리자: '', OS: '', HW사양: '' - }); - } - - // 4. 전산비품 (노트북, 태블릿, 휴대폰 각각 5개씩) - const equips = [ - { type: '노트북', code: 'NB', name: 'LG 그램 16인치', price: '1,800,000' }, - { type: '태블릿', code: 'TB', name: '아이패드 프로 12.9', price: '1,500,000' }, - { type: '휴대폰', code: 'PH', name: '갤럭시 S24', price: '1,200,000' } - ]; - equips.forEach((eq) => { - for (let i = 1; i <= 5; i++) { - const purchaseYear = Math.floor(Math.random() * 8) + 2019; // 2019~2026 - hw.push({ - id: Math.random().toString(36).substring(2, 9), - type: '전산비품', - 법인: rand(corps), - 비품유형: eq.type, - 자산코드: `HM-${eq.code}-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: eq.name, - 위치: rand(['본사', '지사']), - 관리자: randUser(), - 구매일: randDate(purchaseYear, purchaseYear), - 금액: eq.price, - 납품업체: '브랜드 총판', - 품의서명: '', - IP주소: '', MACaddress: '', OS: '', HW사양: '' - }); - } - }); - - // 5. 구독형 S/W 40개 - for (let i = 1; i <= 40; i++) { - const swId = Math.random().toString(36).substring(2, 9); - const purchaseYear = Math.random() < 0.3 ? 2026 : 2024; - - let isExpiring = Math.random() < 0.25; - let endDt = new Date(); - if (isExpiring) { - endDt.setDate(endDt.getDate() + Math.floor(Math.random() * 25) + 1); // 1~25일 뒤 만료 - } else { - endDt.setMonth(endDt.getMonth() + Math.floor(Math.random() * 11) + 2); // 넉넉히 남음 - } - const endStr = `${endDt.getFullYear()}.${String(endDt.getMonth()+1).padStart(2,'0')}.${String(endDt.getDate()).padStart(2,'0')}`; - - sw.push({ - id: swId, - type: '구독SW', - 분야: rand(['업무공통', '개발S/W', '디자인', '설계S/W']), - 법인: rand(corps), - 부서: rand(depts), - 제품명: rand(['Adobe CC All Apps', 'Microsoft 365', 'Slack Pro', 'Notion Team']), - 구매일: `${purchaseYear}-01-01`, - 구독일: `${purchaseYear}.01.01 ~ ${endStr}`, - 금액: String(Math.floor(Math.random() * 100 + 10) * 10000).replace(/\B(?=(\d{3})+(?!\d))/g, ','), - 수량: Math.floor(Math.random() * 5) + 3, // 3~7 - 계정명: `user${i}@hm.com`, - 납품업체: '총판', - 비고: '연간구독' - }); - - const assignCount = Math.floor(Math.random() * 2) + 1; - for (let j=0; j { - let hd = HW_HEADERS; - let wscols: any[] = []; - - if (tab === '개인PC') { - hd = PC_HEADERS; - wscols = [{wch:15}, {wch:25}, {wch:15}, {wch:20}, {wch:20}, {wch:20}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } else if (tab === '서버') { - hd = SERVER_HEADERS; - wscols = [{wch:15}, {wch:20}, {wch:15}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:20}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:30}]; - } else if (tab === '스토리지') { - hd = STORAGE_HEADERS; - wscols = [{wch:15}, {wch:15}, {wch:25}, {wch:25}, {wch:20}, {wch:25}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } else { - hd = HW_HEADERS; - wscols = [{wch:15}, {wch:20}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:40}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } - - const ws = XLSX.utils.aoa_to_sheet([hd]); - ws['!cols'] = wscols; - XLSX.utils.book_append_sheet(wb, ws, tab); - }); - - SW_TABS.forEach(tab => { - let hd = tab === '구독SW' ? SUB_SW_HEADERS : PERM_SW_HEADERS; - const ws = XLSX.utils.aoa_to_sheet([hd]); - ws['!cols'] = [{wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:30}, {wch:15}, {wch:20}, {wch:15}, {wch:10}, {wch:20}, {wch:20}, {wch:30}]; - XLSX.utils.book_append_sheet(wb, ws, tab); - }); - - const swUserWs = XLSX.utils.aoa_to_sheet([SW_USER_HEADERS]); - swUserWs['!cols'] = [{wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - XLSX.utils.book_append_sheet(wb, swUserWs, 'SW_사용자'); - - const historyWs = XLSX.utils.aoa_to_sheet([HISTORY_HEADERS]); - historyWs['!cols'] = [{wch:15}, {wch:20}, {wch:20}, {wch:50}, {wch:15}]; - XLSX.utils.book_append_sheet(wb, historyWs, 'History'); - - XLSX.writeFile(wb, 'itam_assets_template.xlsx'); -} - -/** - * 마스터 데이터를 여러 시트로 쪼개서 내보내기 - */ -export function exportToExcel(masterData: MasterAssetData) { - const wb = XLSX.utils.book_new(); - - HW_TABS.forEach(tab => { - const targetAssets = masterData.hw.filter(a => a.type === tab); - let wsData; - let colsConfig; - - if (tab === '개인PC') { - wsData = [ - PC_HEADERS, - ...targetAssets.map(a => [a.법인, a.자산코드, a.사용자, a.위치, a.CPU, a.GPU, a.RAM, a.SSD1, a.SSD2, a.HDD1, a.HDD2, a.구매일, a.금액, a.납품업체, a.품의서명]) - ]; - colsConfig = [{wch:15}, {wch:25}, {wch:15}, {wch:20}, {wch:20}, {wch:20}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } else if (tab === '서버') { - wsData = [ - SERVER_HEADERS, - ...targetAssets.map(a => [a.법인, a.자산코드, a.storage유형 || '물리', a.용도 || '', a.위치, a.담당자_정 || '', a.담당자_부 || '', a.IP주소, a.원격접속 || '', a.모델명 || '', a.OS, a.CPU, a.RAM, a.GPU || '', a.SSD1 || '', a.SSD2 || '', a.HDD1 || '', a.모니터링 || '', a.비고 || '']) - ]; - colsConfig = [{wch:15}, {wch:20}, {wch:15}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:20}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:30}]; - } else if (tab === '스토리지') { - wsData = [ - STORAGE_HEADERS, - ...targetAssets.map(a => [a.법인, a.storage유형, a.자산코드, a.명칭, a.위치, a.모델명, a.용량, a.담당자_정, a.담당자_부, a.IP주소, a.MACaddress, a.구매일, a.금액, a.납품업체, a.품의서명]) - ]; - colsConfig = [{wch:15}, {wch:15}, {wch:25}, {wch:25}, {wch:20}, {wch:25}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } else { - wsData = [ - HW_HEADERS, - ...targetAssets.map(a => [a.법인, a.자산코드, a.명칭, a.위치, a.관리자, a.IP주소, a.MACaddress, a.HW사양, a.OS, a.구매일, a.금액, a.납품업체, a.품의서명]) - ]; - colsConfig = [{wch:15}, {wch:20}, {wch:25}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:40}, {wch:20}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - } - - const ws = XLSX.utils.aoa_to_sheet(wsData); - ws['!cols'] = colsConfig; - XLSX.utils.book_append_sheet(wb, ws, tab); - }); - - SW_TABS.forEach(tab => { - const targetAssets = masterData.sw.filter(a => a.type === tab); - let wsData; - if (tab === '구독SW') { - wsData = [ - SUB_SW_HEADERS, - ...targetAssets.map(a => [a.id, a.분야||'', a.법인, a.부서||'', a.제품명, a.구매일, a.구독일, a.금액, a.수량, a.계정명, a.납품업체, a.비고]) - ]; - } else { - wsData = [ - PERM_SW_HEADERS, - ...targetAssets.map(a => [a.id, a.분야||'', a.법인, a.부서||'', a.제품명, a.구매일, a.유지보수여부 ? 'Y' : 'N', a.금액, a.수량, a.계정명, a.납품업체, a.비고]) - ]; - } - const ws = XLSX.utils.aoa_to_sheet(wsData); - ws['!cols'] = [{wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:30}, {wch:15}, {wch:20}, {wch:15}, {wch:10}, {wch:20}, {wch:20}, {wch:30}]; - XLSX.utils.book_append_sheet(wb, ws, tab); - }); - - const swUserWsData = [ - SW_USER_HEADERS, - ...masterData.swUsers.map(u => [u.id, u.swId, u.법인, u.부서, u.팀, u.직위, u.이름, u.사용기간, u.신청서명]) - ]; - const swUserWs = XLSX.utils.aoa_to_sheet(swUserWsData); - swUserWs['!cols'] = [{wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:15}, {wch:20}, {wch:25}]; - XLSX.utils.book_append_sheet(wb, swUserWs, 'SW_사용자'); - - const historyWsData = [ - HISTORY_HEADERS, - ...masterData.logs.map(l => [l.id, l.assetId, l.date, l.details, l.user]) - ]; - const historyWs = XLSX.utils.aoa_to_sheet(historyWsData); - historyWs['!cols'] = [{wch:15}, {wch:20}, {wch:20}, {wch:50}, {wch:15}]; - XLSX.utils.book_append_sheet(wb, historyWs, 'History'); - - const dateStr = new Date().toISOString().split('T')[0]; - XLSX.writeFile(wb, `itam_assets_master_${dateStr}.xlsx`); -} - -export async function parseExcel(file: File): Promise { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = (e) => { - try { - const data = e.target?.result; - const workbook = XLSX.read(data, { type: 'binary' }); - const hwAssets: HardwareAsset[] = []; - const swAssets: SoftwareAsset[] = []; - const swUsers: SWUser[] = []; - const logs: HardwareLog[] = []; - - workbook.SheetNames.forEach(sheetName => { - const worksheet = workbook.Sheets[sheetName]; - const json = XLSX.utils.sheet_to_json(worksheet) as any[]; - - if (HW_TABS.includes(sheetName)) { - json.forEach(row => { - if (sheetName === '개인PC') { - hwAssets.push({ - id: Math.random().toString(36).substring(2, 9), - type: sheetName, - 법인: row['법인'] || '', - 자산코드: row['자산코드'] || '', - 명칭: '', - 위치: row['위치'] || '', - 사용자: row['사용자'] || '', - 관리자: '', IP주소: '', MACaddress: '', HW사양: '', OS: '', - CPU: row['CPU'] || '', GPU: row['GPU'] || '', RAM: row['RAM'] || '', - SSD1: row['SSD1'] || '', SSD2: row['SSD2'] || '', HDD1: row['HDD1'] || '', HDD2: row['HDD2'] || '', - 구매일: row['구매일'] || '', 금액: row['금액'] ? String(row['금액']) : '', - 납품업체: row['납품업체'] || '', 품의서명: row['품의서명'] || '', - }); - } else if (sheetName === '서버') { - hwAssets.push({ - id: Math.random().toString(36).substring(2, 9), - type: sheetName, - 법인: row['법인'] || '', - 자산코드: row['자산번호'] || row['자산코드'] || '', - 명칭: row['용도'] || row['명칭'] || '', - 용도: row['용도'] || '', 위치: row['설치위치'] || row['위치'] || '', - 관리자: row['담당자(정)'] || '', 담당자_정: row['담당자(정)'] || '', 담당자_부: row['담당자(부)'] || '', - IP주소: row['IP 주소'] || row['IP주소'] || '', IP2: row['IP2'] || '', - 원격접속: row['원격접속'] || '', 서버ID: row['서버ID'] || '', 서버PW: row['서버PW'] || '', - 모델명: row['모델명'] || '', OS: row['OS'] || '', - CPU: row['CPU'] || '', RAM: row['RAM'] || '', GPU: row['GPU'] || '', - SSD1: row['Storage1'] || row['SSD1'] || '', SSD2: row['Storage2'] || row['SSD2'] || '', HDD1: row['Storage3'] || row['HDD1'] || '', - 모니터링: row['모니터링'] || '', 비고: row['비고'] || '', storage유형: row['유형'] || '물리', - MACaddress: '', HW사양: '', 구매일: '', 금액: '', 납품업체: '', 품의서명: '', - }); - } else if (sheetName === '스토리지') { - hwAssets.push({ - id: Math.random().toString(36).substring(2, 9), - type: sheetName, - 법인: row['법인'] || '', 자산코드: row['자산코드'] || '', 명칭: row['명칭'] || '', 위치: row['위치'] || '', - 관리자: '', IP주소: row['IP주소'] || '', MACaddress: row['MAC주소'] || '', HW사양: '', OS: '', - storage유형: row['유형'] || '', 모델명: row['모델명'] || '', 용량: row['용량'] || '', - 담당자_정: row['담당자(정)'] || '', 담당자_부: row['담당자(부)'] || '', - 구매일: row['구매일'] || '', 금액: row['금액'] ? String(row['금액']) : '', - 납품업체: row['납품업체'] || '', 품의서명: row['품의서명'] || '', - }); - } else { - hwAssets.push({ - id: Math.random().toString(36).substring(2, 9), - type: sheetName, - 법인: row['법인'] || '', 자산코드: row['자산코드'] || '', 명칭: row['명칭'] || '', 위치: row['위치'] || '', - 관리자: row['관리자'] || '', IP주소: row['IP주소'] || '', MACaddress: row['MACaddress'] || '', - HW사양: row['HW사양'] || '', OS: row['OS'] || '', - 구매일: row['구매일'] || '', 금액: row['금액'] ? String(row['금액']) : '', - 납품업체: row['납품업체'] || '', 품의서명: row['품의서명'] || '', - }); - } - }); - } - - if (SW_TABS.includes(sheetName)) { - json.forEach(row => { - swAssets.push({ - id: row['ID'] ? String(row['ID']) : Math.random().toString(36).substring(2, 9), - type: sheetName, 분야: row['분야'] || '', 법인: row['법인'] || '', 부서: row['부서'] || '', 제품명: row['제품명'] || '', - 구매일: row['구매일'] || '', 구독일: row['구독일'] || '', 유지보수여부: row['유지보수여부'] === 'Y' || row['유지보수여부'] === true, - 금액: row['금액'] ? String(row['금액']) : '', 수량: parseInt(row['수량'] || '1', 10), - 계정명: row['계정명'] || '', 납품업체: row['납품업체'] || '', 비고: row['비고'] || '', - }); - }); - } - - if (sheetName === 'SW_사용자') { - json.forEach(row => { - swUsers.push({ - id: row['id'] ? String(row['id']) : Math.random().toString(36).substring(2, 9), - swId: row['swId'] ? String(row['swId']) : '', 법인: row['법인'] || '', 부서: row['부서'] || '', - 팀: row['팀'] || '', 직위: row['직위'] || '', 이름: row['이름'] || '', - 사용기간: row['사용기간'] || '', 신청서명: row['신청서명'] || '', - }); - }); - } - - if (sheetName === 'History') { - json.forEach(row => { - logs.push({ - id: row['id'] ? String(row['id']) : Math.random().toString(36).substring(2, 9), - assetId: row['assetId'] ? String(row['assetId']) : '', - date: row['date'] || '', details: row['details'] || '', user: row['user'] || '', - }); - }); - } - }); - resolve({ hw: hwAssets, sw: swAssets, swUsers, logs }); - } catch (err) { - reject(err); - } - }; - reader.onerror = (err) => reject(err); - reader.readAsBinaryString(file); - }); -} diff --git a/backup_refactor/src/core/realServerData.ts b/backup_refactor/src/core/realServerData.ts deleted file mode 100644 index ead448d..0000000 --- a/backup_refactor/src/core/realServerData.ts +++ /dev/null @@ -1,1603 +0,0 @@ -export const realServerData = [ - { - "법인": "한맥", - "자산코드": "hm-idc-001", - "storage유형": "서버", - "용도": "한맥 인트라넷", - "상세": "", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.70", - "IP2": "192.168.10.5", - "원격접속": "원격데스크탑\nRemote Util", - "서버ID": "administrator\n211.206.127.70", - "서버PW": "samanerp1!\n1234아이티!", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2016", - "CPU": "intel xeon silver4110 CPU @2.10GHz 2.10GHZ", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "2.7TB" - }, - { - "법인": "한맥", - "자산코드": "hm-idc-002", - "storage유형": "서버", - "용도": "한맥 인트라넷 예비", - "상세": "단가, 입사자지원 서버 (4/1 장헌산업 이름으로 스마트 건설 용도 구매)", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.78", - "IP2": "192.168.10.13", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "Hanmac2141!", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2019", - "CPU": "intel xeon silver4214R CPU @2.40GHz 2.39GHZ", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "2.7TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-001", - "storage유형": "서버", - "용도": "삼안 인트라넷", - "상세": "", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.237", - "IP2": "erp.samaneng.com", - "원격접속": "원격데스크탑\nRemote Util", - "서버ID": "administrator\n118.220.172.237", - "서버PW": "samanerp1!\n1234아이티!", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2016", - "CPU": "intel xeon silver4214R CPU @2.40GHz 2.39GHZ", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "3.27TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-002", - "storage유형": "서버", - "용도": "삼안 인트라넷 예비", - "상세": "", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.249", - "IP2": "", - "원격접속": "원격데스크탑\nRemote Util", - "서버ID": "administrator\n678-605-383-130", - "서버PW": "samanerp1!\n1234아이티!", - "모델명": "HPE ProLiant DL360 GEN9", - "OS": "Windows Server 2008 R2", - "CPU": "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 2.40GHz", - "RAM": "32GB", - "SSD1": "279GB", - "SSD2": "2.72TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-003", - "storage유형": "서버", - "용도": "SATIS 01", - "상세": "구 SATIS 서버, 세금계산서 발행(회계)", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.228", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "satissg11707808", - "모델명": "HPE ProLiant DL380p GEN8", - "OS": "Windows Server 2008 R2", - "CPU": "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz", - "RAM": "20GB", - "SSD1": "100GB", - "SSD2": "458GB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-004", - "storage유형": "서버", - "용도": "SATIS 02", - "상세": "SATIS 리뉴얼 버전 (ERP 서버)", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.229", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "satissg11707808", - "모델명": "HPE ProLiant DL380p GEN8", - "OS": "Windows Server 2008 R2", - "CPU": "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz", - "RAM": "20GB", - "SSD1": "100GB", - "SSD2": "458GB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-005", - "storage유형": "서버", - "용도": "웹 서버", - "상세": "남양주 테스트 서버 (도메인 관리 기능 제거 2026.03.11)", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "samanweb.cafe24.com", - "IP2": "118.220.172.195", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "saman+2013+web", - "모델명": "HPE ProLiant DL380p GEN8", - "OS": "Windwos Server 2012", - "CPU": "Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 2.40GHz", - "RAM": "16GB", - "SSD1": "100GB", - "SSD2": "230GB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-006", - "storage유형": "서버", - "용도": "PQ DB 서버", - "상세": "", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.231", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "7013ddj10235!", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2019", - "CPU": "intel xeon silver4210R CPU @2.40GHz 2.39GHZ", - "RAM": "32GB", - "SSD1": "278GB", - "SSD2": "2.18TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-007", - "storage유형": "서버", - "용도": "Oracle DB 서버", - "상세": "", - "위치": "서관 202번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.225", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "7013ddj10235!", - "모델명": "HPE ProLiant DL380 GEN9", - "OS": "Windows Server 2012", - "CPU": "Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz 2.20GHz", - "RAM": "64GB", - "SSD1": "558GB", - "SSD2": "1.09TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-008", - "storage유형": "서버", - "용도": "안전관리", - "상세": "삼안 개발서버2 - AI, SSL, 장헌TBM, 노드", - "위치": "서관 202번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "1.234.37.171", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "samanerp1!", - "모델명": "HPE ProLiant DL380 GEN10", - "OS": "Windwos Server 2022", - "CPU": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "RAM": "128GB", - "SSD1": "278GB", - "SSD2": "3.27TB" - }, - { - "법인": "삼안", - "자산코드": "sa-idc-009", - "storage유형": "서버", - "용도": "가족사 공통메뉴", - "상세": "삼안 개발서버1 - QNA, 급여명세서", - "위치": "서관 202번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.233", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "samanerp1!", - "모델명": "HPE ProLiant DL380 GEN10", - "OS": "Windwos Server 2022", - "CPU": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "RAM": "128GB", - "SSD1": "278GB", - "SSD2": "3.27TB" - }, - { - "법인": "한라", - "자산코드": "hl-idc-001", - "storage유형": "서버", - "용도": "한라 인트라넷", - "상세": "인트라넷,안전, 운영, MISO 서버로 운영 중(win 2008)", - "위치": "동관 54번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "1.234.37.143", - "IP2": "", - "원격접속": "Remote Util", - "서버ID": "1.234.37.143", - "서버PW": "1234dkdlxl!", - "모델명": "HPE ProLiant DL360 GEN9", - "OS": "Windows Server 2008 R2", - "CPU": "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz", - "RAM": "8GB", - "SSD1": "299GB", - "SSD2": "631GB" - }, - { - "법인": "한라", - "자산코드": "hl-idc-002", - "storage유형": "서버", - "용도": "안전전산화 서버 (디자인팀 웹)", - "상세": "인트라넷 서버 다운 시 백업용 대기, (임시) 디자인팀 웹 퍼블리싱 서버", - "위치": "동관 54번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "1.234.37.144", - "IP2": "192.168.20.49", - "원격접속": "Remote Util", - "서버ID": "1.234.37.144", - "서버PW": "1234dkdlxl!", - "모델명": "HPE ProLiant DL360 GEN9", - "OS": "Windows Server 2012", - "CPU": "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz", - "RAM": "8GB", - "SSD1": "299GB", - "SSD2": "631GB" - }, - { - "법인": "한라", - "자산코드": "hl-idc-003", - "storage유형": "서버", - "용도": "개발서버2", - "상세": "PTC 연구비로 구매한 예비서버2\n이전 : 하수도자산 소스+프로그램 현재 : 큰길 서비스용 xampp+ PostgreSQL, BEPs", - "위치": "동관 53번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "192.168.20.171", - "IP2": "1.234.37.171", - "원격접속": "Remote Util\n원격데스크탑", - "서버ID": "1.234.37.171\nadministrator", - "서버PW": "1234dkdlxl!\nHanmac2141!%", - "모델명": "HPE ProLiant DL380 Gen10", - "OS": "Windows Server 2019 Standard", - "CPU": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "1TB" - }, - { - "법인": "장헌", - "자산코드": "jh-idc-001", - "storage유형": "서버", - "용도": "장헌인트라넷", - "상세": "", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.71", - "IP2": "192.168.10.6", - "원격접속": "Remote Util", - "서버ID": "211.206.127.71", - "서버PW": "1234dkdlxl!", - "모델명": "HPE ProLiant DL380 GEN10", - "OS": "Windows Server 2019", - "CPU": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "1TB" - }, - { - "법인": "장헌", - "자산코드": "jh-idc-002", - "storage유형": "서버", - "용도": "장헌 인트라넷 예비", - "상세": "", - "위치": "동관 53번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "1.234.37.170", - "IP2": "192.168.20.170", - "원격접속": "Remote Util\n원격데스크탑", - "서버ID": "1.234.37.170\nAdministrator", - "서버PW": "1234dkdlxl!\nHanmac2141!", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2019", - "CPU": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "1TB" - }, - { - "법인": "장헌", - "자산코드": "jh-idc-003", - "storage유형": "서버", - "용도": "인트라넷(구)", - "상세": "현재는 GIT 백업 으로 사용", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.110", - "IP2": "192.168.10.40", - "원격접속": "Remote Util\n원격데스크탑", - "서버ID": "211.206.127.110\nUser", - "서버PW": "1234dkdlxl!\nHanmac2141!", - "모델명": "", - "OS": "Windows Server 2019", - "CPU": "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "(주)장헌", - "자산코드": "jh-idc-004", - "storage유형": "서버", - "용도": "(주) 장헌 인트라넷", - "상세": "2025.12.23 (주) 장헌 센터 MDF에서 IDC로 이전 설치", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.76", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "User", - "서버PW": "Hanmac2141!%", - "모델명": "", - "OS": "Windows 10", - "CPU": "12th Gen Intel(R) Core(TM) i7-12700F", - "RAM": "32GB", - "SSD1": "465GB", - "SSD2": "1.81TB" - }, - { - "법인": "PTC", - "자산코드": "ptc-idc-001", - "storage유형": "서버", - "용도": "PTC인트라넷", - "상세": "구 파일 서버(부서자료 백업용), 2024.05.22 인트라넷서버로 교체", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.72", - "IP2": "192.168.10.7", - "원격접속": "Remote Util", - "서버ID": "211.206.127.72", - "서버PW": "1234dkdlxl!", - "모델명": "SYSTEM X3650 M2", - "OS": "Windows Server 2008 R2", - "CPU": "Intel(R) Xeon(R) CPU E5520 @ 2.27GHz 2.26GHz", - "RAM": "16GB", - "SSD1": "556GB", - "SSD2": "" - }, - { - "법인": "PTC", - "자산코드": "ptc-idc-002", - "storage유형": "서버", - "용도": "예비서버", - "상세": "PTC 인트라넷 예비서버", - "위치": "서관 204번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "192.168.10.8", - "IP2": "", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "1234dkdlxl!", - "모델명": "HPE ProLiant DL360 GEN10", - "OS": "Windows Server 2019", - "CPU": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "RAM": "32GB", - "SSD1": "278GB", - "SSD2": "1.09TB" - }, - { - "법인": "PTC", - "자산코드": "ptc-idc-003", - "storage유형": "서버", - "용도": "DB 백업 서버", - "상세": "구 파일 인트라넷, 2024.05.22에 DB 백업 테스트 서버로 변경 (데스크탑)", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.74", - "IP2": "192.168.10.9", - "원격접속": "Remote Util", - "서버ID": "211.206.127.74", - "서버PW": "1234dkdlxl!", - "모델명": "", - "OS": "Window 7", - "CPU": "Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz 2.13GHz", - "RAM": "4GB", - "SSD1": "593GB", - "SSD2": "1.23TB" - }, - { - "법인": "바론", - "자산코드": "br-idc-001", - "storage유형": "서버", - "용도": "인트라넷", - "상세": "", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "211.206.127.75", - "IP2": "192.168.10.10", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "Hanmac2141!%", - "모델명": "HPE ProLiant DL360 GEN10", - "OS": "Windows Server 2022", - "CPU": "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "2.18TB" - }, - { - "법인": "현타", - "자산코드": "ht-idc-001", - "storage유형": "서버", - "용도": "인트라넷", - "상세": "", - "위치": "동관 53번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "1.234.37.172", - "IP2": "192.168.20.172", - "원격접속": "원격데스크탑", - "서버ID": "administrator", - "서버PW": "Hanmac2141!", - "모델명": "HPE ProLiant DL380 GEN10", - "OS": "Windows Server 2019", - "CPU": "Intel Xeon Silver 4210R CPU @ 2.40GHz 2.39GHz", - "RAM": "32GB", - "SSD1": "280GB", - "SSD2": "1TB" - }, - { - "법인": "삼안", - "자산코드": "sa-das-001", - "storage유형": "서버", - "용도": "", - "상세": "Satis01, Satis02 광케이블 연결 (물리연결)", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "IP2": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "삼안", - "자산코드": "sa-nas-001", - "storage유형": "서버", - "용도": "인트라넷 백업 스토리지", - "상세": "", - "위치": "서관 203번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.246", - "IP2": "118.220.172.246", - "원격접속": "원격", - "서버ID": "administrator", - "서버PW": "sg11707808", - "모델명": "", - "OS": "Promiss R Series", - "CPU": "36TB", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "삼안", - "자산코드": "sa-nas-002", - "storage유형": "서버", - "용도": "성과품 스토리지", - "상세": "매니지먼트 접속 확인 불가 (콘솔 연결 후 페이지 오픈 필요)", - "위치": "서관 205번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.248", - "IP2": "118.220.172.247", - "원격접속": "원격", - "서버ID": "administrator\n-", - "서버PW": "sg11707808\n-", - "모델명": "", - "OS": "ENC_3U_16BAY_D // SEAGATE ST2000NM0045", - "CPU": "23TB", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "삼안", - "자산코드": "sa-nas-003", - "storage유형": "서버", - "용도": "성과품 백업 스토리지", - "상세": "", - "위치": "서관 202번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "118.220.172.241", - "IP2": "118.220.172.240", - "원격접속": "원격", - "서버ID": "administrator\nadmin0", - "서버PW": "saman1!\nRoot1234", - "모델명": "", - "OS": "Promiss R Series", - "CPU": "48TB", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한라", - "자산코드": "hl-das-001", - "storage유형": "서버", - "용도": "", - "상세": "파일서버 정보 없음(접속 불가)", - "위치": "동관 54번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "IP2": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한라", - "자산코드": "hl-das-002", - "storage유형": "서버", - "용도": "", - "상세": "파일서버 정보 없음(접속 불가)", - "위치": "동관 54번", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "IP2": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "NAS", - "용도": "GSIM NAS", - "상세": "팀 내부 자료 저장 , 정사영상 및 지도 데이터 저장 , Gitea 및 Git 내장 NAS", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Synology DS923+", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "NAS", - "용도": "그래픽스개발팀 데이터 백업 NAS", - "상세": "그래픽스 개발팀 데이터 백업용 NAS", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Synology DS923+", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "공통 GIT 서버", - "상세": "개발 소스코드 서버 (구조물 S/W ,그래픽스개발_HMEG.천지인)", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Dell EMC PowerEdge T380", - "OS": "CentOS Linux 7 (Core)", - "CPU": "Intel(R) Xeon(R) E-2324G CPU @ 3.10GHz", - "RAM": "16GB", - "SSD1": "1TB", - "SSD2": "1TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "BUILD 서버", - "상세": "PM 컨버터(PDF) 서버, PDF 및 비디오 썸네일 생성", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10 Pro", - "CPU": "12th Gen Intel(R) Core(TM) i9-12900K", - "RAM": "128GB", - "SSD1": "4TB", - "SSD2": "10TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "HmEG 테스트 서버", - "상세": "HmEG 테스트 서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10 Pro", - "CPU": "Intel(R) Core(TM) i5-10400F @ 2.906 GHz", - "RAM": "16GB", - "SSD1": "250GB", - "SSD2": "1TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "산하 ERP 개발서버", - "상세": "산하 ERP 개발용 서버(산하 ERP는 클라우드)", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "공간정보 신청", - "상세": "수치지형도 , 지적도 등 공간정보 자료 제공 서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10", - "CPU": "Intel(R) Core i5-10400 CPU @ 2.90GHz 2.90GHz", - "RAM": "16GB", - "SSD1": "232GB", - "SSD2": "931GB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "AI 관련", - "상세": "", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "한종 테스트", - "상세": "", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "GSIM 언리얼 서버", - "상세": "오브젝트 스토리지(클라우드)를 NAS에 백업(매주 목), ERP유저정보 업데이트(매일), 언리얼 스트리밍 서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10 Pro", - "CPU": "Intel(R) Xeon(R) Gold 6136", - "RAM": "128GB", - "SSD1": "1TB", - "SSD2": "8TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "AutoCAD 테스트 서버", - "상세": "오토캐드 테스트 서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10 Pro", - "CPU": "AMD Ryzen9 3900X 12-Core Processor", - "RAM": "32GB", - "SSD1": "500GB", - "SSD2": "2TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "GSIM 테스트 서버", - "상세": "개발 테스트용 일반 PC", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 10 Pro", - "CPU": "Intel(R) Core(TM) i7-9700KF", - "RAM": "32GB", - "SSD1": "512GB", - "SSD2": "512GB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "공간데이터 서버", - "상세": "인트라넷 공간정보신청 서비스, 과거 공간데이터(~2022년) 보관 - 추후 공간정보 백업서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "CentOS 7.6.1810 (Core)", - "CPU": "Intel Xeon Silver 4108 * 2", - "RAM": "128 GB", - "SSD1": "512 GB", - "SSD2": "8 TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "PC", - "용도": "가평 VM 원격 서버", - "상세": "", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "GSIM 협업", - "상세": "삼안 예비서버2 + 한종개발 +한종기존소스 vmware", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL380 Gen10", - "OS": "Server 2019", - "CPU": "Intel Xeon(R) Silver 4208 CPU @ 2.10GHz", - "RAM": "128GB", - "SSD1": "300GB", - "SSD2": "1.88TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "스토리지", - "용도": "GSIM 협업 스토리지", - "상세": "", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Promiss R Series R3600", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "GSIM META 서버", - "상세": "PM 백업 서버, 오브젝트 스토리지(온프레미스, 클라우드)API 연결", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2019 Standard", - "CPU": "Intel(R) Xeon(R) Silver 4208 CPU", - "RAM": "96GB", - "SSD1": "300GB", - "SSD2": "4TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "GSIM 서버", - "상세": "Basemap 데이터 저장", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Windows Server 2019 Standard", - "CPU": "Intel(R) Xeon(R) Silver 4214R", - "RAM": "32GB", - "SSD1": "300GB", - "SSD2": "4TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "스토리지", - "용도": "GSIM 스토리지", - "상세": "ProjectMaster 오브젝트 스토리지", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Promiss R Series R3600", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "함양-합천 서버", - "상세": "함양합천서버, GSIM 웹서비스, PM 웹서비스", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL380 Gen10", - "OS": "Windows Server 2019 Standard", - "CPU": "", - "RAM": "", - "SSD1": "600GB", - "SSD2": "10TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "HM MapService 2.0 서버", - "상세": "공간데이터 다운로드 서비스 등", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "172.16.42.127", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL380 Gen10", - "OS": "Windows Server 2019 Standard", - "CPU": "Intel Xeon Silver 4208", - "RAM": "128 GB", - "SSD1": "1.2 TB", - "SSD2": "40 TB" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "스토리지", - "용도": "HM MapService 2.0 스토리지", - "상세": "공간데이터 저장용", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "Promiss R Series R3600", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "Gitlab Runner", - "상세": "GitLab 운영 서버", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "HPE ProLiant DL360 Gen10", - "OS": "Window Server 2019 Standard", - "CPU": "Intel(R) Xeon(R) Silver 4208 CPU @ 2.10GHz", - "RAM": "64GB", - "SSD1": "1.2 TB", - "SSD2": "" - }, - { - "법인": "기술개발센터", - "자산코드": "", - "storage유형": "서버", - "용도": "전산모사", - "상세": "EGBIM, ParaView, CFDCore", - "위치": "마천사무실", - "담당자_정": "", - "담당자_부": "", - "IP주소": "", - "원격접속": "", - "서버ID": "", - "서버PW": "", - "모델명": "", - "OS": "Windows 11 Pro", - "CPU": "13th Gen Intel(R) Core(TM) i9-13900KS (3.20 GHz)", - "RAM": "128GB", - "SSD1": "2TB", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "1", - "storage유형": "NAS", - "용도": "NAS 2", - "상세": "한라 기업부설연구소 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.23", - "모델명": "DS414j", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "2", - "storage유형": "NAS", - "용도": "NAS 1", - "상세": "한라 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.32", - "모델명": "DS224+", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "3", - "storage유형": "NAS", - "용도": "NAS 4", - "상세": "한라 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.25", - "모델명": "CS407", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "4", - "storage유형": "NAS", - "용도": "NAS 5", - "상세": "한라 환경플랜트사업부 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.30", - "모델명": "DS923+", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "5", - "storage유형": "NAS", - "용도": "NAS 6", - "상세": "한라 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.27", - "모델명": "DS923+", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "6", - "storage유형": "NAS", - "용도": "NAS7", - "상세": "한라 원주바이오 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.20", - "모델명": "DS414j", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "7", - "storage유형": "NAS", - "용도": "총괄기획실 NAS", - "상세": "총괄기획실 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.10.5", - "모델명": "DS413j", - "담당자_정": "-", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "8", - "storage유형": "NAS", - "용도": "한맥 NAS 1", - "상세": "한맥 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.10.3", - "모델명": "DS416j", - "담당자_정": "순서 파악 필요", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "9", - "storage유형": "NAS", - "용도": "한맥 NAS 2", - "상세": "한맥 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.10.6", - "모델명": "DS416j", - "담당자_정": "순서 파악 필요", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "10", - "storage유형": "NAS", - "용도": "한맥 NAS 3", - "상세": "한맥 공용 NAS", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.10.7", - "모델명": "DS416j", - "담당자_정": "순서 파악 필요", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "11", - "storage유형": "NAS", - "용도": "NAS 13", - "상세": "환경플랜트사업", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "172.16.100.3", - "모델명": "DS218play", - "담당자_정": "이준하 차장", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "12", - "storage유형": "PC", - "용도": "회계", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "조립PC", - "담당자_정": "찾아야함", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "13", - "storage유형": "PC", - "용도": "한맥CAD", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "조립PC", - "담당자_정": "찾아야함", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "14", - "storage유형": "서버(타워)", - "용도": "Ai-Cell-Util", - "상세": "깃티, 매터모스트 등 70여종", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "HP Z6", - "담당자_정": "", - "OS": "Ubuntu 24.04", - "CPU": "Intel(R) Xeon(R) Gold 6248R", - "RAM": "64GB", - "SSD1": "2 TB", - "SSD2": "8 TB" - }, - { - "법인": "한맥빌딩", - "자산코드": "15", - "storage유형": "PC", - "용도": "한라CAD", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "조립PC", - "담당자_정": "찾아야함", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "16", - "storage유형": "NAS", - "용도": "디자인팀1 NAS", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.99", - "모델명": "DS1522+", - "담당자_정": "권순호 연구원", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "17", - "storage유형": "NAS", - "용도": "디자인팀2 NAS", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "192.168.9.100", - "모델명": "DS1522+", - "담당자_정": "권순호 연구원", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "18", - "storage유형": "서버(미니워크스테이션)", - "용도": "인사정보 서버", - "상세": "인사정보 PM", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "172.16.10.187", - "모델명": "HP Z2 Mini G5 Workstation", - "담당자_정": "", - "OS": "Windows 11 Pro", - "CPU": "intel xeon w-1250p cpu", - "RAM": "32GB", - "SSD1": "2 TB", - "SSD2": "2 TB" - }, - { - "법인": "한맥빌딩", - "자산코드": "19", - "storage유형": "서버(타워)", - "용도": "BEPs 서버", - "상세": "BEPs 개발서버, Outline 협업서비스", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "Dell Precision 3680T", - "담당자_정": "", - "OS": "Windows 11 Pro", - "CPU": "Intel Core i9 14900K (24 Core, 32 Thread)", - "RAM": "64GB", - "SSD1": "2 TB", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "20", - "storage유형": "서버(타워)", - "용도": "Ai-Cell-A100-1", - "상세": "OCR, Local LLM 등 30여종", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "조립", - "담당자_정": "", - "OS": "Ubuntu 24.04", - "CPU": "AMD Ryzen Threadripper PRO 7975WX", - "RAM": "256GB", - "SSD1": "2 TB", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "21", - "storage유형": "서버(타워)", - "용도": "빌드서버", - "상세": "인스톨 쉴드, 지라", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "", - "모델명": "Dell EMC PowerEdge T350", - "담당자_정": "", - "OS": "Windows Server 2022 Standard", - "CPU": "Intel(R) Xeon(R) E-2378G CPU @ 2.80GHz 2.81 GHz", - "RAM": "32GB", - "SSD1": "1TB", - "SSD2": "4TB" - }, - { - "법인": "한맥빌딩", - "자산코드": "22", - "storage유형": "PC\n서버(랙)", - "용도": "저장소 및 전산모사\n구)스마트건설 서버", - "상세": "ParaView, CFDCore\n디지털화설문, 검색WIKI 웹서비스", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "172.16.10.213", - "모델명": "조립PC\nProLiant DL360 Gen10", - "담당자_정": "", - "OS": "Windows 10 Pro", - "CPU": "Intel Core i7-7700 CPU 3.60GHz", - "RAM": "32GB", - "SSD1": "500GB", - "SSD2": "2TB" - }, - { - "법인": "한맥빌딩", - "자산코드": "23", - "storage유형": "서버(랙)", - "용도": "IDC 산하ERP서버", - "상세": "XR 가상화 메인 서버 → IDC 산하ERP서버", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "172.16.10.226", - "모델명": "ProLiant DL360 Gen10", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "24", - "storage유형": "스토리지(랙)", - "용도": "WAS Storage", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "Promise Vess R3600", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "25", - "storage유형": "서버(랙)", - "용도": "한맥 백업 서버", - "상세": "가족사 인트라넷 소스 백업 서버", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "Promise Vess R3600", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "26", - "storage유형": "서버(랙)", - "용도": "한라 백업 서버", - "상세": "한라 웹 소스 및 Miso DB 백업 서버", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "SuperMicro IR5019P-Series", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "27", - "storage유형": "NAS", - "용도": "기술개발센터 NAS", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "RS822+", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "28", - "storage유형": "NAS", - "용도": "-", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "RS815+", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "29", - "storage유형": "스토리지(랙)", - "용도": "Backup Storage", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "Promise Vess", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "30", - "storage유형": "스토리지(랙)", - "용도": "-", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "Promise Vess R3600", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "31", - "storage유형": "서버(랙)", - "용도": "XR WAS Server", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "ProLiant DL360 Gen10", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - }, - { - "법인": "한맥빌딩", - "자산코드": "32", - "storage유형": "서버(랙)", - "용도": "WAS Storage", - "상세": "", - "위치": "한맥빌딩(MDF 실)", - "IP주소": "-", - "모델명": "Promise Vess R3600", - "담당자_정": "", - "OS": "", - "CPU": "", - "RAM": "", - "SSD1": "", - "SSD2": "" - } -]; diff --git a/backup_refactor/src/core/state.ts b/backup_refactor/src/core/state.ts deleted file mode 100644 index 96bc1ac..0000000 --- a/backup_refactor/src/core/state.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { MasterAssetData, HardwareAsset } from './excelHandler'; -import { generateDummyData } from './dummyDataGenerator'; -import { realServerData } from './realServerData'; - -// --- State Definitions --- -export interface AppState { - masterData: MasterAssetData; - activeCategory: 'hw' | 'sw' | 'ops'; - activeSubTab: string; - activeCharts: any[]; -} - -const dummy = generateDummyData(); -// 서버 데이터만 실제 데이터로 교체 -const mergedHw: HardwareAsset[] = [ - ...dummy.hw.filter(a => a.type !== '서버'), - ...realServerData.map(s => ({ - id: s.id || Math.random().toString(36).substring(2, 9), - type: '서버', - 법인: s.법인, - 자산코드: s.자산코드, - 명칭: s.용도 || '', - 위치: s.위치, - 관리자: s.담당자_정 || '홍길동', - 담당자_정: s.담당자_정 || '홍길동', - 담당자_부: s.담당자_부 || '김철수', - IP주소: s.IP주소, - IP2: s.IP2 || '', - MACaddress: s.MACaddress || '', - HW사양: s.HW사양 || '', - OS: s.OS, - CPU: s.CPU, - RAM: s.RAM, - SSD1: s.SSD1, - SSD2: s.SSD2, - HDD1: s.HDD1, - storage유형: s.storage유형, - 모델명: s.모델명, - 구매일: s.구매일 || '', - 금액: s.금액 || '', - 납품업체: s.납품업체 || '', - 품의서명: s.품의서명 || '', - 용도: s.용도, - 상세: s.상세, - 원격접속: s.원격접속 || '', - 서버ID: s.서버ID || '', - 서버PW: s.서버PW || '', - 모니터링: s.모니터링 || '', - 비고: s.비고 || '' - })) -]; - -// --- Initial State --- -export const state: AppState = { - masterData: { - ...dummy, - hw: mergedHw, // 기본적으로 하드코딩된 데이터를 가지고 시작 - logs: [] - }, - activeCategory: 'hw', - activeSubTab: '대시보드', - activeCharts: [] -}; - -/** - * DB에서 데이터 로드 - */ -export async function loadMasterDataFromDB() { - try { - const response = await fetch('http://localhost:3000/api/hw'); - if (!response.ok) throw new Error('DB 로드 실패'); - const data = await response.json(); - if (data && data.length > 0) { - state.masterData.hw = data; - console.log('✅ DB 데이터 로드 완료'); - return true; - } - } catch (err) { - console.warn('⚠️ 백엔드 서버 연결 실패. 로컬 데이터를 유지합니다.'); - } - return false; -} - -// --- State Helpers --- -export function updateState(newState: Partial) { - Object.assign(state, newState); -} diff --git a/backup_refactor/src/main.ts b/backup_refactor/src/main.ts deleted file mode 100644 index c575bff..0000000 --- a/backup_refactor/src/main.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { state, loadMasterDataFromDB } from './core/state'; -import { renderNavigation } from './components/Navigation'; -import { renderDashboard } from './views/DashboardView'; -import { renderTable } from './views/AssetTableView'; -import { downloadTemplate, exportToExcel, parseExcel, HardwareAsset } from './core/excelHandler'; -import { initBaseModal } from './components/Modal/BaseModal'; -import { initPcModal } from './components/Modal/PCModal'; -import { initHwModal, openHwModal } from './components/Modal/HWModal'; -import { initStorageModal } from './components/Modal/StorageModal'; -import { initSwModal } from './components/Modal/SWModal'; -import { initSwUserModal } from './components/Modal/SWUserModal'; -import { initDashboardDetailModal } from './components/Modal/DashboardDetailModal'; -import { createIcons, Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2, History, RefreshCcw } from 'lucide'; - -// --- DB 저장을 위한 헬퍼 함수 --- -async function saveAllHwToDB(assets: HardwareAsset[]) { - try { - const response = await fetch('http://localhost:3000/api/hw/batch', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(assets) - }); - if (!response.ok) throw new Error('DB 저장 실패'); - console.log('✅ DB 저장 완료'); - } catch (err) { - console.error('❌ DB 저장 실패:', err); - } -} - -// --- App Initialization --- -function initApp() { - console.log('🚀 ITAM System Initializing...'); - const mainContent = document.getElementById('main-content')!; - if (!mainContent) return; - - // 1. 전역 모달 및 내비게이션 초기화 - const { closeAllModals } = initBaseModal(); - - try { - renderNavigation((tab) => { - if (tab === '대시보드') { - renderDashboard(mainContent); - } else { - renderTable(mainContent); - } - }); - - initPcModal(() => { - saveAllHwToDB(state.masterData.hw); - renderTable(mainContent); - }, closeAllModals); - - initHwModal(); - - initStorageModal(() => { - saveAllHwToDB(state.masterData.hw); - renderTable(mainContent); - }, closeAllModals); - - initSwModal(() => renderTable(mainContent), closeAllModals); - initSwUserModal(() => renderTable(mainContent), closeAllModals); - initDashboardDetailModal(); - } catch (e) { - console.error('❌ Initialization failed:', e); - } - - // 2. 초기 렌더링 - renderDashboard(mainContent); - - // 3. 비동기 데이터 로드 - loadMasterDataFromDB().then((success) => { - if (success) { - if (state.activeSubTab === '대시보드') renderDashboard(mainContent); - else renderTable(mainContent); - } - }); - - // 4. 이벤트 바인딩 - document.getElementById('btn-download-template')?.addEventListener('click', () => downloadTemplate()); - document.getElementById('btn-export-excel')?.addEventListener('click', () => exportToExcel(state.masterData)); - - const uploadInput = document.getElementById('excel-upload') as HTMLInputElement; - uploadInput?.addEventListener('change', async (e) => { - const file = (e.target as HTMLInputElement).files?.[0]; - if (file) { - const data = await parseExcel(file); - state.masterData = data; - await saveAllHwToDB(data.hw); - renderTable(mainContent); - } - }); - - document.getElementById('btn-add-asset')?.addEventListener('click', () => { - if (state.activeSubTab === '서버' || state.activeSubTab === '전산비품' || state.activeSubTab === '스토리지') { - openHwModal({ - id: Math.random().toString(36).substring(2, 9), - type: state.activeSubTab, - 법인: '한맥', 자산코드: '', 명칭: '', 위치: '', 관리자: '', IP주소: '', MACaddress: '', HW사양: '', OS: '', 납품업체: '', 품의서명: '' - } as any); - } - }); - - createIcons({ - icons: { Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2, History, RefreshCcw } - }); -} - -document.addEventListener('DOMContentLoaded', initApp); diff --git a/backup_refactor/src/server_data.json b/backup_refactor/src/server_data.json deleted file mode 100644 index d193679..0000000 --- a/backup_refactor/src/server_data.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "법인": "(주)회사1", - "자산코드": "ASSET-100", - "명칭": "서버 모델A", - "위치": "본사 1층", - "관리자": "관리자A", - "IP주소": "192.168.0.1", - "MACaddress": "00:00:00:00:00:01", - "HW사양": "Core i7, 16GB RAM", - "OS": "Windows 10" - } -] \ No newline at end of file diff --git a/backup_refactor/src/styles/common.css b/backup_refactor/src/styles/common.css deleted file mode 100644 index fa5cae3..0000000 --- a/backup_refactor/src/styles/common.css +++ /dev/null @@ -1,262 +0,0 @@ -:root { - --primary-color: #1E5149; - --primary-hover: #153c36; - --primary-light: #edf2f1; - --text-main: #111827; - --text-muted: #6B7280; - --border-color: #E5E7EB; - --bg-color: #F9FAFB; - --white: #FFFFFF; - --danger: #dc2626; - - --header-height: 52px; -} - -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -body { - font-family: 'Pretendard Variable', Pretendard, sans-serif; - color: var(--text-main); - background-color: var(--bg-color); - line-height: 1.5; - letter-spacing: -0.02em; - font-size: 14px; - overflow: hidden; -} - -.app-layout { - display: flex; - flex-direction: column; - height: 100vh; - width: 100%; -} - -/* --- Integrated Header Style --- */ -.main-header { - background-color: var(--white); - border-bottom: 1px solid var(--border-color); - z-index: 100; - height: var(--header-height); -} - -.header-container { - height: 100%; - display: flex; - align-items: center; - padding: 0 1.5rem; - gap: 1.5rem; -} - -.brand h1 { - font-size: 1.2rem; - font-weight: 800; - color: var(--text-main); - white-space: nowrap; - margin-right: 1rem; -} -.brand h1 span { color: var(--primary-color); } - -/* --- Integrated Nav --- */ -.integrated-nav { - flex: 1; - height: 100%; - display: flex; - align-items: center; - gap: 0.5rem; -} - -.nav-group { - display: flex; - align-items: center; - height: 100%; -} - -.gnb-trigger { - font-size: 14px; - font-weight: 700; - color: var(--text-main); - padding: 0 1rem; - cursor: pointer; - height: 100%; - display: flex; - align-items: center; - white-space: nowrap; -} - -.lnb-shelf { - display: none; - align-items: center; - gap: 0.25rem; - padding: 0 0.75rem; - height: 60%; - border-left: 1px solid var(--border-color); - margin-left: 0.25rem; - animation: fadeIn 0.2s ease-out; -} - -.nav-group:hover .lnb-shelf, -.nav-group.is-showing-shelf .lnb-shelf { - display: flex; -} - -.lnb-item { - font-size: 13px; - font-weight: 500; - color: var(--text-muted); - cursor: pointer; - padding: 0.2rem 0.6rem; - border-radius: 4px; - white-space: nowrap; -} - -.lnb-item.active { - color: var(--primary-color); - background-color: var(--primary-light); - font-weight: 700; -} - -@keyframes fadeIn { - from { opacity: 0; transform: translateX(-5px); } - to { opacity: 1; transform: translateX(0); } -} - -/* --- Header Actions --- */ -.header-actions { display: flex; gap: 0.3rem; align-items: center; } - -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 0.35rem; - padding: 0 0.8rem; - font-size: 12px; - font-weight: 600; - border-radius: 4px; - cursor: pointer; - height: 28px; - line-height: 1; -} - -.btn i, .btn svg { width: 12px !important; height: 12px !important; } - -.btn-primary { background-color: var(--primary-color); color: var(--white); border: 1px solid var(--primary-color); } -.btn-outline { background-color: transparent; color: var(--text-muted); border: 1px solid var(--border-color); } - -/* --- Content Area & Standardized Layout --- */ -.content-area { - flex: 1; - padding: 2rem; /* benchmark: 좌, 우, 하단 2rem 공백 통일 */ - overflow-y: auto; - background-color: var(--bg-color); -} - -.view-container { - width: 100%; - display: flex; - flex-direction: column; - gap: 1.5rem; -} - -/* --- Search Filter Bar --- */ -.search-bar { - display: flex; - flex-wrap: wrap; - gap: 1.25rem; - background-color: var(--white); - padding: 1.5rem; - border: 1px solid var(--border-color); - border-radius: 8px; - align-items: flex-end; -} - -.search-item { display: flex; flex-direction: column; gap: 0.4rem; } -.search-item.flex-1 { flex: 1; } -.search-item label { font-size: 11px; font-weight: 800; color: var(--text-muted); } -.search-item input, -.search-item select { - height: 32px; - padding: 0 2.5rem 0 0.75rem; /* Increased right padding for arrow */ - border: 1px solid var(--border-color); - border-radius: 3px; - font-size: 13px; - outline: none; - appearance: none; /* Modern arrow styling */ - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-9'/%3E%3C/svg%3E"); - background-repeat: no-repeat; - background-position: right 0.75rem center; -} - -.search-item input { - padding-right: 0.75rem; -} - -.btn-reset { - height: 32px !important; - padding: 0 0.8rem !important; - font-size: 12px !important; - display: inline-flex !important; - align-items: center !important; - gap: 0.35rem !important; - border-radius: 4px !important; -} - -/* --- Table (Box-less Design) --- */ -.table-container { - background-color: var(--white); - border-top: 1px solid var(--border-color); - border-bottom: 1px solid var(--border-color); - border-left: none; - border-right: none; - overflow: auto; - max-height: calc(100vh - 240px); /* Adjusting for bottom spacing */ -} - -table { width: 100%; border-collapse: collapse; } -th, td { - padding: 1rem 1.5rem; - border-bottom: 1px solid var(--border-color); - text-align: left; - white-space: nowrap; /* Force single line for all info */ -} -th { - background-color: #FAFAFA; - font-weight: 700; - color: var(--text-muted); - font-size: 12px; - position: sticky; - top: 0; - z-index: 10; - box-shadow: inset 0 -1px 0 var(--border-color); - text-transform: uppercase; -} -td { font-size: 14px; } -tbody tr:hover { background-color: #F9FAFB; } - -/* --- Dashboard Style --- */ -.dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 1.5rem; margin-bottom: 2rem; } -.stat-card { background-color: var(--white); padding: 1.5rem; border: 1px solid var(--border-color); border-radius: 8px; } -.stat-card .value { font-size: 2.2rem; font-weight: 800; color: var(--primary-color); margin-top: 0.5rem; } -.dashboard-layout-2col { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1.5rem; } -.dashboard-card { - background-color: var(--white); - border: 1px solid var(--border-color); - border-radius: 8px; - padding: 1.5rem; - display: flex; - flex-direction: column; - min-height: 360px; /* Increased height for better chart view */ -} -.dashboard-card canvas { - flex: 1; - width: 100% !important; - max-height: 280px; -} -.dashboard-section-title { padding: 0 0 1rem 0; font-size: 1.1rem; font-weight: 700; color: var(--text-main); } - -.hidden { display: none !important; } -.text-nowrap { white-space: nowrap; } -.btn-sm { padding: 0.25rem 0.5rem; font-size: 11px; height: 24px; } diff --git a/backup_refactor/src/styles/modal.css b/backup_refactor/src/styles/modal.css deleted file mode 100644 index 4f6b79c..0000000 --- a/backup_refactor/src/styles/modal.css +++ /dev/null @@ -1,267 +0,0 @@ -/* Modal */ -.modal-overlay { - position: fixed; - top: 0; left: 0; right: 0; bottom: 0; - background-color: rgba(0, 0, 0, 0.4); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; - opacity: 0; - visibility: hidden; - transition: opacity 0.2s ease, visibility 0.2s ease; -} - -.modal-overlay:not(.hidden) { opacity: 1; visibility: visible; } - -.modal-content { - background-color: var(--white); - width: 100%; - max-width: 600px; - max-height: 90vh; - border-radius: 8px; - overflow: hidden; - box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); - transform: translateY(20px); - transition: transform 0.2s ease; - display: flex; - flex-direction: column; -} - -.modal-overlay:not(.hidden) .modal-content { transform: translateY(0); } - -.modal-header { - background-color: var(--primary-color); - color: var(--white); - padding: 1rem 1.5rem; - display: flex; - justify-content: space-between; - align-items: center; - flex-shrink: 0; -} - -.modal-header h2 { - font-size: 1.125rem; - font-weight: 600; - letter-spacing: -0.02em; -} - -.modal-header .btn-icon { - color: #FFFFFF !important; - cursor: pointer; - background: none !important; - border: none !important; -} - -.modal-header .btn-icon i, -.modal-header .btn-icon svg { - width: 20px !important; /* Original natural size */ - height: 20px !important; - stroke: #FFFFFF !important; -} - -.modal-header .btn-icon:hover { - background: none !important; -} - -.modal-body { - padding: 1.5rem; - overflow-y: auto; - flex: 1; -} - -.grid-form { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 1.25rem; -} - -.form-group { - display: flex; - flex-direction: column; - gap: 0.375rem; -} - -.form-group.full-width { - grid-column: span 2; -} - -/* Section Title for Grouping */ -.form-section-title { - grid-column: span 2; - font-size: 0.875rem; - font-weight: 700; - color: var(--primary-color); - padding: 1.5rem 0 0.5rem 0; /* 패딩 조정 */ - border-bottom: 1px solid var(--border-color); - margin-bottom: 0.5rem; - display: flex; - align-items: center; -} - -/* Modal Readonly/Edit Mode Interaction */ -.grid-form.is-view-mode input, -.grid-form.is-view-mode select, -.grid-form.is-view-mode textarea { - border-color: transparent !important; - background-color: transparent !important; - padding-left: 0; - padding-right: 0; - pointer-events: none; - color: var(--text-main); - font-weight: 500; -} - -.grid-form.is-edit-mode input, -.grid-form.is-edit-mode select, -.grid-form.is-edit-mode textarea { - color: #FF3D00; /* 수정 시 글자색 변경 */ - border: 1px solid var(--border-color); -} - -.grid-form.is-edit-mode input:focus, -.grid-form.is-edit-mode select:focus, -.grid-form.is-edit-mode textarea:focus { - border-color: #FF3D00; - box-shadow: 0 0 0 2px rgba(255, 61, 0, 0.1); -} - -.form-section-title:first-child { - padding-top: 0.5rem; -} - -.form-group label { - font-size: 0.8125rem; - font-weight: 600; - color: var(--text-muted); -} - -.form-group input, -.form-group select, -.form-group textarea { - padding: 0.625rem; - border: 1px solid var(--border-color); - border-radius: 4px; - font-family: inherit; - font-size: 0.875rem; - outline: none; - transition: all 0.2s; - background-color: var(--white); -} - -.form-group input:focus, -.form-group select:focus, -.form-group textarea:focus { - border-color: var(--primary-color); - box-shadow: 0 0 0 2px rgba(30, 81, 73, 0.1); -} - -.modal-footer { - padding: 1rem 1.5rem; - border-top: 1px solid var(--border-color); - display: flex; - justify-content: space-between; - align-items: center; - background-color: #FAFAFA; - flex-shrink: 0; -} - -.footer-actions { - display: flex; - gap: 0.5rem; -} - -/* Wide Modal for History/Detail */ -.modal-content.wide { - max-width: 950px; -} - -.modal-body-split { - display: flex; - gap: 2rem; - min-height: 480px; -} - -.modal-form-area { - flex: 1.2; -} - -.modal-history-area { - flex: 0.8; - border-left: 1px solid var(--border-color); - padding-left: 1.5rem; - display: flex; - flex-direction: column; -} - -.history-header { - margin-bottom: 1rem; -} - -.history-header h3 { - font-size: 0.9375rem; - font-weight: 600; - display: flex; - align-items: center; - gap: 0.5rem; - color: var(--text-main); -} - -.history-timeline { - flex: 1; - overflow-y: auto; - max-height: 500px; - padding-right: 0.5rem; -} - -.history-item { - position: relative; - padding-left: 1.25rem; - padding-bottom: 1.5rem; - border-left: 2px solid var(--border-color); -} - -.history-item::before { - content: ''; - position: absolute; - left: -7px; - top: 0; - width: 12px; - height: 12px; - border-radius: 50%; - background-color: var(--white); - border: 2px solid var(--primary-color); -} - -.history-item:last-child { - border-left: 2px solid transparent; -} - -.history-date { - font-size: 0.75rem; - color: var(--text-muted); - font-weight: 500; - margin-bottom: 0.25rem; -} - -.history-user { - font-size: 0.75rem; - font-weight: 600; - color: var(--primary-color); - margin-bottom: 0.25rem; -} - -.history-details { - font-size: 0.8125rem; - color: var(--text-main); - line-height: 1.4; - white-space: pre-wrap; - word-break: break-all; -} - -.empty-history { - padding: 2rem 0; - text-align: center; - color: var(--text-muted); - font-size: 0.8125rem; -} diff --git a/backup_refactor/src/views/AssetTableView.ts b/backup_refactor/src/views/AssetTableView.ts deleted file mode 100644 index af4460d..0000000 --- a/backup_refactor/src/views/AssetTableView.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { state } from '../core/state'; -import { createIcons, Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2, RefreshCcw } from 'lucide'; -import { openPcModal } from '../components/Modal/PCModal'; -import { openHwModal } from '../components/Modal/HWModal'; -import { openStorageModal } from '../components/Modal/StorageModal'; -import { openSwModal } from '../components/Modal/SWModal'; -import { openSwUserModal } from '../components/Modal/SWUserModal'; - -/** - * 자산 목록 테이블 렌더링 메인 함수 - */ -export function renderTable(mainContent: HTMLElement) { - mainContent.innerHTML = ''; - const container = document.createElement('div'); - container.className = 'view-container'; - const table = document.createElement('table'); - - if (state.activeCategory === 'hw') { - renderHwTable(table, container, mainContent); - } else { - renderSwTable(table, container, mainContent); - } - - createIcons({ - icons: { Download, Upload, FileSpreadsheet, Plus, X, LayoutDashboard, Monitor, Server, Database, Laptop, CalendarClock, Key, Cpu, Layers, Users, Paperclip, Edit2 } - }); -} - -function renderHwTable(table: HTMLTableElement, container: HTMLElement, mainContent: HTMLElement) { - const fullList = state.masterData.hw.filter(a => a.type === state.activeSubTab); - container.innerHTML = ''; - - // --- 1. Search Bar (Unified Style) --- - const filterBar = document.createElement('div'); - filterBar.className = 'search-bar'; - - const corps = Array.from(new Set(fullList.map(a => a.법인))).filter(Boolean).sort(); - const orgUnits = Array.from(new Set(fullList.map(a => a.현사용조직))).filter(Boolean).sort(); - - filterBar.innerHTML = ` -
- - -
-
- - -
- ${state.activeSubTab === '서버' ? ` -
- - -
` : ''} - - `; - container.appendChild(filterBar); - - // --- 2. Table Structure (Unified Style) --- - const tableWrapper = document.createElement('div'); - tableWrapper.className = 'table-container'; - - if (state.activeSubTab === '개인PC') { - table.innerHTML = `No법인자산코드사용자위치CPURAMStorage구매일금액품의서관리`; - } else if (state.activeSubTab === '서버') { - table.innerHTML = `No법인현 사용조직자산번호용도상세설치위치담당자IP주소모델명OSCPU/RAMStorage관리`; - } else if (state.activeSubTab === '스토리지') { - table.innerHTML = `No법인유형자산코드명칭위치모델명용량IP주소구매일관리`; - } else { - table.innerHTML = `No법인자산코드명칭위치관리자구매일금액관리`; - } - - tableWrapper.appendChild(table); - container.appendChild(tableWrapper); - mainContent.appendChild(container); - - const tbody = document.getElementById('dynamic-tbody')!; - - const updateTable = () => { - const keyword = (document.getElementById('filter-keyword') as HTMLInputElement).value.toLowerCase().trim(); - const corp = (document.getElementById('filter-corp') as HTMLSelectElement).value; - const orgUnit = (document.getElementById('filter-org-unit') as HTMLSelectElement)?.value || ''; - - const filtered = fullList.filter(asset => { - const matchKeyword = !keyword || String(asset.자산코드||'').toLowerCase().includes(keyword) || String(asset.현사용조직||'').toLowerCase().includes(keyword) || String(asset.모델명||'').toLowerCase().includes(keyword); - const matchCorp = !corp || asset.법인 === corp; - const matchOrg = !orgUnit || asset.현사용조직 === orgUnit; - return matchKeyword && matchCorp && matchOrg; - }); - - tbody.innerHTML = ''; - if (filtered.length === 0) { - const colSpan = table.querySelectorAll('th').length; - tbody.innerHTML = `검색 결과가 없습니다.`; - return; - } - - filtered.forEach((asset, idx) => { - const tr = document.createElement('tr'); - tr.style.cursor = 'pointer'; - const formatInline = (v: any) => String(v || '').replace(/\n/g, ' / ').trim(); - - if (state.activeSubTab === '개인PC') { - const storage = [asset.SSD1, asset.SSD2, asset.HDD1].filter(v => v).join(' / '); - tr.innerHTML = `${idx+1}${asset.법인}${asset.자산코드}${asset.사용자||''}${asset.위치||''}${asset.CPU||''}${asset.RAM||''}${formatInline(storage)}${asset.구매일||''}${asset.금액||''}${asset.품의서명 ? '' : '-'}`; - tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openPcModal(asset); }); - } else if (state.activeSubTab === '서버') { - const cpuRam = [asset.CPU, asset.RAM].filter(v => v).join(' / '); - const storage = [asset.SSD1, asset.SSD2].filter(v => v).join(' / '); - const ipInfo = [asset.IP주소, asset.IP2].filter(v => v).join(' / '); - tr.innerHTML = `${idx+1}${asset.법인}${asset.현사용조직||''}${asset.자산코드}${formatInline(asset.용도)}${formatInline(asset.상세)}${formatInline(asset.위치)}${asset.담당자_정||''}${formatInline(ipInfo)}${asset.모델명||''}${asset.OS||''}${formatInline(cpuRam)}${formatInline(storage)}`; - tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openHwModal(asset); }); - } else if (state.activeSubTab === '스토리지') { - tr.innerHTML = `${idx+1}${asset.법인}${asset.storage유형||''}${asset.자산코드}${asset.명칭}${asset.위치||''}${asset.모델명||''}${asset.용량||''}${asset.IP주소||''}${asset.구매일||''}`; - tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openStorageModal(asset); }); - } else { - tr.innerHTML = `${idx+1}${asset.법인}${asset.자산코드}${asset.명칭}${asset.위치}${asset.관리자}${asset.구매일||''}${asset.금액||''}`; - tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openHwModal(asset); }); - } - tbody.appendChild(tr); - }); - createIcons({ icons: { Paperclip, Edit2, RefreshCcw } }); - }; - - const keywordInput = document.getElementById('filter-keyword') as HTMLInputElement; - const corpSelect = document.getElementById('filter-corp') as HTMLSelectElement; - const orgSelect = document.getElementById('filter-org-unit') as HTMLSelectElement; - const resetBtn = document.getElementById('btn-reset-filters') as HTMLButtonElement; - - keywordInput.addEventListener('input', updateTable); - corpSelect.addEventListener('change', updateTable); - orgSelect?.addEventListener('change', updateTable); - resetBtn.addEventListener('click', () => { - keywordInput.value = ''; corpSelect.value = ''; if(orgSelect) orgSelect.value = ''; - updateTable(); - }); - - updateTable(); -} - -function renderSwTable(table: HTMLTableElement, container: HTMLElement, mainContent: HTMLElement) { - const fullList = state.masterData.sw.filter(a => a.type === state.activeSubTab); - const isSub = state.activeSubTab === '구독SW'; - container.innerHTML = ''; - const filterBar = document.createElement('div'); - filterBar.className = 'search-bar'; - filterBar.innerHTML = `
`; - container.appendChild(filterBar); - - const tableWrapper = document.createElement('div'); - tableWrapper.className = 'table-container'; - table.classList.add('sw-table'); - table.innerHTML = `No.분야법인부서제품명구매일${isSub ? '구독일' : ''}금액수량사용가능관리`; - tableWrapper.appendChild(table); - container.appendChild(tableWrapper); - mainContent.appendChild(container); - - const tbody = document.getElementById('dynamic-tbody')!; - const updateTable = () => { - const keyword = (document.getElementById('filter-keyword') as HTMLInputElement).value.toLowerCase().trim(); - const field = (document.getElementById('filter-field') as HTMLSelectElement).value; - const corp = (document.getElementById('filter-corp') as HTMLSelectElement).value; - const filtered = fullList.filter(asset => { - const matchKeyword = !keyword || (asset.제품명 || '').toLowerCase().includes(keyword) || (asset.부서 || '').toLowerCase().includes(keyword); - const matchField = !field || asset.분야 === field; - const matchCorp = !corp || asset.법인 === corp; - return matchKeyword && matchField && matchCorp; - }); - tbody.innerHTML = ''; - if (filtered.length === 0) { - tbody.innerHTML = `검색 결과가 없습니다.`; - return; - } - filtered.forEach((asset, idx) => { - const assigned = state.masterData.swUsers.filter(u => u.swId === asset.id).length; - const qty = typeof asset.수량 === 'number' ? asset.수량 : parseInt(asset.수량||'0', 10); - const avail = qty - assigned; - const tr = document.createElement('tr'); - tr.style.cursor = 'pointer'; - tr.innerHTML = `${idx+1}${asset.분야||''}${asset.법인}${asset.부서||''}${asset.제품명}${asset.구매일||''}${isSub ? `${asset.구독일||''}` : ''}${asset.금액||'0'}${qty}${avail}`; - tr.addEventListener('click', (e) => { if (!(e.target as HTMLElement).closest('button')) openSwModal(asset); }); - tr.querySelector('.btn-edit')?.addEventListener('click', () => openSwModal(asset)); - tr.querySelector('.btn-users')?.addEventListener('click', () => openSwUserModal(asset)); - tbody.appendChild(tr); - }); - createIcons({ icons: { Edit2, Users, RefreshCcw } }); - }; - - const keywordInput = document.getElementById('filter-keyword') as HTMLInputElement; - const fieldSelect = document.getElementById('filter-field') as HTMLSelectElement; - const corpSelect = document.getElementById('filter-corp') as HTMLSelectElement; - const resetBtn = document.getElementById('btn-reset-filters') as HTMLButtonElement; - keywordInput.addEventListener('input', updateTable); - fieldSelect.addEventListener('change', updateTable); - corpSelect.addEventListener('change', updateTable); - resetBtn.addEventListener('click', () => { - keywordInput.value = ''; fieldSelect.value = ''; corpSelect.value = ''; - updateTable(); - }); - updateTable(); -} diff --git a/backup_refactor/src/views/DashboardView.ts b/backup_refactor/src/views/DashboardView.ts deleted file mode 100644 index 364514f..0000000 --- a/backup_refactor/src/views/DashboardView.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { state } from '../core/state'; -import { HardwareAsset, SoftwareAsset } from '../core/excelHandler'; -import { openDashboardDetail, openSwDashboardDetail, openSwUsageDetail } from '../components/Modal/DashboardDetailModal'; - -declare var Chart: any; - -/** - * 대시보드 렌더링 메인 함수 - */ -export function renderDashboard(mainContent: HTMLElement) { - if (!mainContent) return; - mainContent.innerHTML = ''; - - // 기존 차트 리소스 해제 - if (state.activeCharts) { - state.activeCharts.forEach(c => { - if (c && typeof c.destroy === 'function') c.destroy(); - }); - } - state.activeCharts = []; - - if (state.activeCategory === 'hw') { - renderHwDashboard(mainContent); - } else if (state.activeCategory === 'sw') { - renderSwDashboard(mainContent); - } else { - mainContent.innerHTML = `
운영 서비스 대시보드는 준비 중입니다.
`; - } -} - -// --- 하드웨어 대시보드 --- -function renderHwDashboard(container: HTMLElement) { - const types = ['개인PC', '서버', '스토리지', '전산비품']; - const units = ['대', '대', '대', '개']; - const groups: any = {}; - - types.forEach(t => { groups[t] = { idle: [], active: [], aged: [], normal: [] }; }); - - state.masterData.hw.forEach(a => { - if (!groups[a.type]) return; - if (isHwIdle(a)) groups[a.type].idle.push(a); - else groups[a.type].active.push(a); - - const ageY = getHwAgeYears(a); - const isAged = a.type === '전산비품' ? ageY >= 3 : ageY >= 5; - if (isAged) groups[a.type].aged.push(a); - else groups[a.type].normal.push(a); - }); - - let usageCards = ''; - types.forEach((t, i) => { - const total = groups[t].idle.length + groups[t].active.length; - const used = groups[t].active.length; - const per = total > 0 ? Math.round((used / total) * 100) : 0; - const barColor = per >= 50 ? 'var(--dash-primary)' : 'var(--dash-danger)'; - - usageCards += ` -
- ${t} 사용현황 -
- ${total}${units[i]} 중 ${used}${units[i]} 사용 중 -
-
${per}%
-
-
-
-
`; - }); - - container.innerHTML = ` -
-

자산 사용현황 요약

-
${usageCards}
- -

하드웨어 보유 통계

-
-
-

자산 유형별 보유 현황

- -
-
-

법인별 자산 분포

- -
-
-
- `; - - setTimeout(() => { - if (typeof Chart === 'undefined') return; - const ctxType = (document.getElementById('chart-hw-types') as HTMLCanvasElement)?.getContext('2d'); - const ctxCorp = (document.getElementById('chart-hw-corps') as HTMLCanvasElement)?.getContext('2d'); - if (ctxType) { - const chart = new Chart(ctxType, { - type: 'doughnut', - data: { labels: types, datasets: [{ data: types.map(t => state.masterData.hw.filter(a => a.type === t).length), backgroundColor: ['#1E5149', '#3b82f6', '#10b981', '#f59e0b'] }] }, - options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'right' } } } - }); - state.activeCharts.push(chart); - } - if (ctxCorp) { - const corps = ['한맥', '삼안', '바론']; - const chart = new Chart(ctxCorp, { - type: 'bar', - data: { labels: corps, datasets: [{ label: '보유 수량', data: corps.map(c => state.masterData.hw.filter(a => a.법인 === c).length), backgroundColor: 'rgba(30, 81, 73, 0.7)', borderRadius: 4 }] }, - options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } } } - }); - state.activeCharts.push(chart); - } - }, 100); - - container.querySelectorAll('[data-action="idle"]').forEach(card => { - card.addEventListener('click', () => { - const t = card.getAttribute('data-type')!; - openDashboardDetail(`[${t}] 유휴 자산 목록`, groups[t].idle); - }); - }); -} - -// --- 소프트웨어 대시보드 --- -function renderSwDashboard(container: HTMLElement) { - let subQty = 0, subUsed = 0, subExp = 0, subTotal = 0; - let permQty = 0, permUsed = 0, permExp = 0, permTotal = 0; - - const currentYear = new Date().getFullYear().toString(); - const corps = ['한맥', '삼안', '바론']; - const categories = ['업무공통', '개발S/W', '디자인', '설계S/W']; - - const costByCorp: Record = { '한맥': 0, '삼안': 0, '바론': 0 }; - const costByCat: Record = {}; - categories.forEach(c => costByCat[c] = 0); - - state.masterData.sw.forEach(sw => { - const assigned = state.masterData.swUsers.filter(u => u.swId === sw.id).length; - const qty = typeof sw.수량 === 'number' ? sw.수량 : parseInt(sw.수량||'0', 10); - const priceStr = sw.금액 ? String(sw.금액).replace(/,/g, '') : '0'; - const price = parseInt(priceStr, 10) || 0; - - if (sw.type === '구독SW') { - subQty += qty; subUsed += assigned; subTotal++; - if (isSWExpiring(sw)) subExp++; - } else { - permQty += qty; permUsed += assigned; permTotal++; - if (isSWExpiring(sw)) permExp++; - } - - if (sw.구매일 && sw.구매일.startsWith(currentYear)) { - if (costByCorp[sw.법인] !== undefined) costByCorp[sw.법인] += price; - if (sw.분야 && costByCat[sw.분야] !== undefined) costByCat[sw.분야] += price; - } - }); - - const subPer = subQty > 0 ? Math.round((subUsed/subQty)*100) : 0; - const permPer = permQty > 0 ? Math.round((permUsed/permQty)*100) : 0; - const subExpPer = subTotal > 0 ? Math.round((subExp/subTotal)*100) : 0; - const permExpPer = permTotal > 0 ? Math.round((permExp/permTotal)*100) : 0; - - container.innerHTML = ` -
-

소프트웨어 라이선스 현황

-
-
- 구독 소프트웨어 사용율 -
${subQty}카피 중 ${subUsed}개 할당
-
${subPer}%
-
-
-
-
-
- 영구 소프트웨어 사용율 -
${permQty}카피 중 ${permUsed}개 할당
-
${permPer}%
-
-
-
-
-
- -
-
-
- 구독 SW 만료 예정 (30일 이내) -
${subExp}개 제품
-
-
-
- ${subExpPer}% -
-
-
-
-
- 유지보수 만료 예정 (30일 이내) -
${permExp}개 제품
-
-
-
- ${permExpPer}% -
-
-
-
- -

${currentYear}년 도입 비용 분석

-
-
-

법인별 도입 금액 (원)

- -
-
-

분야별 도입 금액 (원)

- -
-
-
- `; - - setTimeout(() => { - if (typeof Chart === 'undefined') return; - const ctxCorp = (document.getElementById('chart-sw-corp') as HTMLCanvasElement)?.getContext('2d'); - const ctxCat = (document.getElementById('chart-sw-cat') as HTMLCanvasElement)?.getContext('2d'); - if (ctxCorp) { - const chart = new Chart(ctxCorp, { - type: 'bar', - data: { labels: corps, datasets: [{ data: corps.map(c => costByCorp[c]), backgroundColor: 'rgba(30, 81, 73, 0.8)', borderRadius: 4 }] }, - options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } } } - }); - state.activeCharts.push(chart); - } - if (ctxCat) { - const chart = new Chart(ctxCat, { - type: 'bar', - data: { labels: categories, datasets: [{ data: categories.map(c => costByCat[c]), backgroundColor: 'rgba(59, 130, 246, 0.8)', borderRadius: 4 }] }, - options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } } } - }); - state.activeCharts.push(chart); - } - }, 100); - - container.querySelector('[data-action="sub-usage"]')?.addEventListener('click', () => openSwUsageDetail('구독 소프트웨어 사용 목록', state.masterData.sw.filter(sw => sw.type === '구독SW'))); - container.querySelector('[data-action="perm-usage"]')?.addEventListener('click', () => openSwUsageDetail('영구 소프트웨어 사용 목록', state.masterData.sw.filter(sw => sw.type === '영구SW'))); - container.querySelector('[data-action="sub-exp"]')?.addEventListener('click', () => openSwDashboardDetail('구독 SW 만료 예정 목록', state.masterData.sw.filter(sw => sw.type === '구독SW' && isSWExpiring(sw)))); - container.querySelector('[data-action="perm-exp"]')?.addEventListener('click', () => openSwDashboardDetail('유지보수 만료 예정 목록', state.masterData.sw.filter(sw => sw.type === '영구SW' && isSWExpiring(sw)))); -} - -function isHwIdle(a: HardwareAsset) { - if (a.type === '개인PC') return !a.사용자 || a.사용자.trim() === '' || a.사용자.trim() === '-'; - if (a.type === '스토리지') return !a.담당자_정 || a.담당자_정.trim() === '' || a.담당자_정.trim() === '-'; - return !a.관리자 || a.관리자.trim() === '' || a.관리자.trim() === '-'; -} - -function getHwAgeYears(a: HardwareAsset) { - if (!a.구매일) return 0; - try { - const buyDate = new Date(a.구매일.replace(/\./g, '-')); - if (isNaN(buyDate.getTime())) return 0; - return (Date.now() - buyDate.getTime()) / (1000 * 60 * 60 * 24 * 365.25); - } catch { return 0; } -} - -function isSWExpiring(sw: SoftwareAsset) { - if (sw.type === '구독SW' && sw.구독일) { - const parts = sw.구독일.split('~'); - if (parts.length > 1) { - const endMs = new Date(parts[1].trim().replace(/\./g, '-')).getTime(); - const diffDays = (endMs - Date.now()) / (1000 * 60 * 60 * 24); - return diffDays >= 0 && diffDays <= 30; - } - } else if (sw.type === '영구SW' && sw.비고 && sw.비고.includes('유지보수: ~')) { - try { - const endMs = new Date(sw.비고.split('~')[1].trim().replace(/\./g, '-')).getTime(); - const diffDays = (endMs - Date.now()) / (1000 * 60 * 60 * 24); - return diffDays >= 0 && diffDays <= 30; - } catch { return false; } - } - return false; -} diff --git a/backup_temp/README.md b/backup_temp/README.md deleted file mode 100644 index 3bc41b3..0000000 --- a/backup_temp/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# 🛠️ 개발 및 관리 규칙 (Strict Development Rules) - -1. **언어 설정**: 영어로 생각하되, 모든 답변은 **한국어**로 작성한다. -2. **임의 수정 절대 금지 (Zero-Arbitrary Change)**: - - 사용자가 명시적으로 지시한 부분 외에는 **단 한 줄의 코드도, 그 어떤 파일도 임의로 수정, 정리, 리팩토링하지 않는다.** - - 지시받지 않은 다른 파트의 코드는 절대 건드리지 않으며, 영향 범위가 요청 범위를 벗어나지 않도록 '외과 수술식(Surgical) 수정'을 원칙으로 한다. -3. **개선 작업 절차 (Test-First Approach)**: - - 사용자가 개선(Refactoring, Optimization 등)을 지시한 경우, **수정 전 현재 시스템이 정상적으로 잘 작동하는지 먼저 전수 확인**한다. - - 기존 동작 방식과 성능을 기준(Baseline)으로 삼고, 수정 후에도 **기존의 모든 기능이 무결하게 유지되는지 반드시 테스트하여 입증**한다. - - 검증 결과를 바탕으로 "무엇을, 왜, 어떻게" 바꿀지 상세 보고 후, 사용자로부터 **'진행시켜'** 승인을 얻은 뒤에만 집행한다. -4. **선보고 후승인**: 모든 기능 수정 및 코드 변경 전에는 예상 방안을 먼저 보고하고 승인 절차를 거친다. - ---- - -### 🚀 서버 구동 및 외부 접속 규칙 (Server Run & External Access) - -1. **포트 고정**: 개발 서버는 반드시 **8080** 포트를 사용한다. (`vite.config.ts` 설정 준수) -2. **외부 접속 허용 (Host)**: 사무실 내 타 직원이 접속할 수 있도록 `--host` 모드로 구동한다. -3. **구동 명령어**: - ```bash - npm run dev - ``` - * 해당 명령어 실행 시 `0.0.0.0` 또는 `Network: http://[내-IP]:8080/` 경로로 타인 접속이 가능하다. -4. **IP 확인 방법**: - * Windows: `ipconfig` 명령어로 'IPv4 주소' 확인 후 공유. - ---- - -### 🎨 ITAM 시스템 디자인 가이드 (Design Guide) - -1. **디자인 철학 (Design Philosophy)** - * **Minimalist & Border-based**: 불필요한 박스(Card) 사용을 최소화하고, 정보의 구분은 간결한 라인(Border/Divider)을 활용하여 시각적 피로도를 낮춥니다. - * **Professional Achromatic**: 무채색(Black, White, Grey)을 기본으로 하여 정돈된 업무 환경을 제공합니다. - * **Green Accent**: 블루 대신 짙은 그린(`#1E5149`)을 포인트 컬러로 사용하여 차분한 전문성을 강조합니다. - -2. **타이포그래피 (Typography)** - * **Font Family**: `Pretendard` (전역 적용) - * **Letter Spacing**: `-0.02em` (약 -2%) 적용. 자간을 좁게 설정하여 밀도 있고 세련된 가독성을 확보합니다. - * **Weights**: 400(Regular), 500(Medium), 600(SemiBold), 700(Bold). - * **Date Format (날짜 표기 규칙)**: 시스템 내 모든 날짜는 `YYYY.MM.DD` 형식을 기본으로 사용합니다. (예: 2026.04.10) - -3. **컬러 팔레트 (Color Palette)** - * **Point Color**: `#1E5149` (Deep Green) - 강조, 활성화 상태, 주요 액션 버튼. - * **Text**: Main(`#111827` - Near Black), Muted(`#6B7280` - Grey). - * **Border/Divider**: `#E5E7EB` (Light Grey) - 정보 구분을 위한 얇은 실선. - * **Background**: `#FFFFFF` (White) / `#F9FAFB` (Off White). - -4. **레이아웃 및 컴포넌트 규칙 (Layout Rules)** - * **Box-less Design**: 꼭 필요한 정보 묶음(데이터 그룹화 등)이 아니면 박스 형태의 테두리나 배경 사용을 지양합니다. - * **Line-based Division**: 섹션 간의 구분은 1px 두께의 얇은 실선(Border)을 통해 명확히 합니다. - * **Table**: 배경색이나 화려한 효과 없이 행(Row) 간의 얇은 구분선만 사용하여 데이터 본연에 집중하게 합니다. - * **Input/Button**: 입력 필드와 버튼은 최소한의 보더와 포인트 컬러만 사용하여 정갈하게 표현합니다. - * **Modal (모달 공통 규칙)**: - * **Header**: 짙은 그린(`#1E5149`) 배경에 화이트 텍스트를 사용하며, 우측 상단에 명확한 'X' 닫기 버튼을 배치합니다. - * **Interaction**: 사용자의 편의를 위해 `ESC` 키를 누르거나 모달 바깥 영역(Overlay)을 클릭하면 모달이 닫히도록 구현합니다. - * **Layout**: `detail.png` 기준의 2열 그리드 시스템을 권장하며, 하단 우측에 액션 버튼(닫기, 저장 등)을 배치합니다. - diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/00.HW요약정보.png b/backup_temp/SAMQ 기능 이미지 캡쳐/00.HW요약정보.png deleted file mode 100644 index c705eef..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/00.HW요약정보.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/00.SW요약정보.png b/backup_temp/SAMQ 기능 이미지 캡쳐/00.SW요약정보.png deleted file mode 100644 index 6adf117..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/00.SW요약정보.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/01.SW자산 사용자 할당.png b/backup_temp/SAMQ 기능 이미지 캡쳐/01.SW자산 사용자 할당.png deleted file mode 100644 index 8234fa2..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/01.SW자산 사용자 할당.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/02.개인PC프로그램설치현황.png b/backup_temp/SAMQ 기능 이미지 캡쳐/02.개인PC프로그램설치현황.png deleted file mode 100644 index 4795416..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/02.개인PC프로그램설치현황.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/03.비인가프로그램실행찯안.png b/backup_temp/SAMQ 기능 이미지 캡쳐/03.비인가프로그램실행찯안.png deleted file mode 100644 index 8e06abb..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/03.비인가프로그램실행찯안.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/04.개인PC사양정보수집.png b/backup_temp/SAMQ 기능 이미지 캡쳐/04.개인PC사양정보수집.png deleted file mode 100644 index 2516b59..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/04.개인PC사양정보수집.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/05.구독라이센스등록페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/05.구독라이센스등록페이지.png deleted file mode 100644 index 59626eb..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/05.구독라이센스등록페이지.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/05.영구라이센스등록페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/05.영구라이센스등록페이지.png deleted file mode 100644 index d17d615..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/05.영구라이센스등록페이지.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/06. 프로그램 할당 현황.png b/backup_temp/SAMQ 기능 이미지 캡쳐/06. 프로그램 할당 현황.png deleted file mode 100644 index f650bf3..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/06. 프로그램 할당 현황.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산관리페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산관리페이지.png deleted file mode 100644 index 0d57cfc..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산관리페이지.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산등록페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산등록페이지.png deleted file mode 100644 index 3537b6c..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/07.실물자산등록페이지.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/08.변경내역페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/08.변경내역페이지.png deleted file mode 100644 index f3a3a6a..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/08.변경내역페이지.png and /dev/null differ diff --git a/backup_temp/SAMQ 기능 이미지 캡쳐/09.HW관리페이지.png b/backup_temp/SAMQ 기능 이미지 캡쳐/09.HW관리페이지.png deleted file mode 100644 index 5d2bc5d..0000000 Binary files a/backup_temp/SAMQ 기능 이미지 캡쳐/09.HW관리페이지.png and /dev/null differ diff --git a/backup_temp/[전산자산관리] 자산번호체계 부여방안 검토 (2026.04.09).pdf b/backup_temp/[전산자산관리] 자산번호체계 부여방안 검토 (2026.04.09).pdf deleted file mode 100644 index 9ac90c6..0000000 Binary files a/backup_temp/[전산자산관리] 자산번호체계 부여방안 검토 (2026.04.09).pdf and /dev/null differ diff --git a/backup_temp/detail.png b/backup_temp/detail.png deleted file mode 100644 index 85fe4f2..0000000 Binary files a/backup_temp/detail.png and /dev/null differ diff --git a/backup_temp/index.html b/backup_temp/index.html deleted file mode 100644 index 4be2827..0000000 --- a/backup_temp/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - ITAM - IT Asset Management - - -
- - - diff --git a/backup_temp/plan.md b/backup_temp/plan.md deleted file mode 100644 index 34a17f2..0000000 --- a/backup_temp/plan.md +++ /dev/null @@ -1,32 +0,0 @@ -# 📑 ITAM 시스템 통합 구축 기획서 (plan.md) - -## 1. 프로젝트 목적 (Objective) -본 시스템은 **'전산자산번호 부여방안'** 표준 가이드에 따라 사내 모든 전산 자산을 통합 관리하는 것을 목적으로 한다. 분산된 자산 정보를 일원화된 번호 체계로 시스템화하여 직관적인 식별과 정밀한 이력 추적이 가능한 플랫폼을 지향한다. - -## 2. 자산번호 체계 적용 (Standardization) -검토안에 따라 모든 자산은 다음과 같은 규칙으로 고유 번호를 부여받으며, 시스템의 핵심 Key로 활용된다. - -* **번호 생성 규칙**: `[구매법인]-[설치위치]-[자산종류]-[일련번호(구매연월+3자리)]` - * *예시: 삼안에서 2025년 4월에 구매한 IDC 서버 → `SM-IDC-SVR-202504001`* -* **코드 정의**: - * **구매법인**: BR(바론), SM(삼안), HM(한맥), JH(장헌), HL(한라), PTC(PTC) 등 - * **설치위치**: TDC(센터 서버실), HBD(한맥빌딩), IDC(IDC), UBD(유니온 빌딩), NBD(뉴코아 빌딩) 등 - * **자산종류**: SVR(서버), PC(PC), STO(스토리지), NAS(NAS), DAS(DAS), HDD(하드) 등 - -## 3. 기획 의도 및 시스템 가치 (Core Intent) -1. **식별 용이성 확보**: 번호만으로도 법인, 위치, 종류, 도입 시기를 즉시 파악할 수 있는 시스템 UI를 제공한다. -2. **전사 통합 관리 로드맵**: - * **Phase 1**: IDC 서버 및 스토리지 데이터 마이그레이션 (현재 완료 단계) - * **Phase 2**: 센터 서버실(TDC) 및 빌딩별 네트워크 장비 확장 - * **Phase 3**: 전사 개인 PC(PC) 및 하드웨어 부품(HDD 등) 통합 - * **Phase 4**: 소프트웨어 라이선스와 하드웨어 자산의 매핑 관리 -3. **데이터 무결성 유지**: 자산 위치 변경 시 기존 번호를 폐기하고 신규 번호를 부여하는 이력 관리 원칙을 시스템상에서 강제 및 기록한다. - -## 4. 시스템 주요 기능 (Key Features) -* **자산 자동 번호 부여**: 입력 폼에서 법인/위치/종류 선택 시 가이드에 따른 자산번호 자동 생성 기능. -* **상세 이력 카드**: 자산번호를 클릭하면 상세 사양, 취득일, 사용자, 현재 상태 및 과거 이동 이력을 모달로 표시. -* **통합 필터링**: 법인별, 위치별, 종류별로 자산을 즉시 분류하여 조회할 수 있는 고성능 테이블 제공. - -## 5. 기술 및 디자인 원칙 (Engineering Standards) -* **Design**: `README.md` 가이드를 준수하며, 자산번호가 가장 강조되는 레이아웃을 유지한다. -* **Data Structure**: 향후 DB 전환 시 자산번호의 각 코드(SM, IDC 등)를 정규화하여 관리 효율을 극대화한다. diff --git a/backup_temp/src/App.css b/backup_temp/src/App.css deleted file mode 100644 index ca88bd1..0000000 --- a/backup_temp/src/App.css +++ /dev/null @@ -1,295 +0,0 @@ -:root { - --primary-color: #1E5149; - --primary-hover: #163d37; - --bg-default: #FFFFFF; - --bg-muted: #F9FAFB; - --info-color: #4B5563; /* 무채색 계열로 변경 */ - --text-main: #111827; - --text-muted: #6B7280; - --border-color: #E5E7EB; -} - -.app-container { - display: flex; - flex-direction: column; - height: 100vh; - width: 100%; - background-color: var(--bg-default); - color: var(--text-main); - letter-spacing: -0.02em; -} - -.top-bar { - height: 50px; - background-color: var(--primary-color); - color: white; - display: flex; - align-items: center; - padding: 0 40px; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); - box-sizing: border-box; -} - -.top-bar-brand { - font-size: 1rem; - font-weight: 700; - margin-right: 48px; - color: white; -} - -.top-bar-menu { - display: flex; - gap: 4px; - height: 100%; -} - -.menu-item { - display: flex; - align-items: center; - padding: 0 16px; - cursor: pointer; - transition: all 0.2s; - color: rgba(255, 255, 255, 0.7); - font-weight: 500; - font-size: 0.875rem; - height: 100%; - border-bottom: 3px solid transparent; -} - -.menu-item:hover { - color: white; -} - -.menu-item.active { - color: white; - border-bottom: 3px solid white; - background-color: rgba(255, 255, 255, 0.1); -} - -.main-content { - flex: 1; - display: flex; - flex-direction: column; - height: calc(100vh - 50px); - overflow: hidden; /* 전체 페이지 스크롤 방지 */ - padding: 0; /* 패딩은 내부 요소에서 관리 */ -} - -.content-header { - padding: 32px 40px 16px 40px; - margin-bottom: 0; - border-bottom: 1px solid var(--border-color); - display: flex; - justify-content: space-between; - align-items: center; - background-color: var(--bg-default); - flex-shrink: 0; -} - -.table-container { - flex: 1; - overflow: auto; - padding: 0 40px 40px 40px; -} - -.content-title { - font-size: 1.5rem; - font-weight: 700; - color: var(--text-main); -} - -/* Common Table Styles */ -.data-table { - width: 100%; - border-collapse: separate; /* sticky border 유지를 위해 separate 사용 */ - border-spacing: 0; - font-size: 0.875rem; -} - -.data-table th, .data-table td { - padding: 14px 12px; - text-align: left; - border-bottom: 1px solid var(--border-color); - white-space: nowrap; -} - -.data-table th { - font-weight: 600; - color: var(--text-muted); - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 0.05em; - background-color: #F8FAFC; /* 헤더 전용 배경색 */ - position: sticky; - top: 0; - z-index: 10; - border-bottom: 2px solid var(--border-color); -} - -.data-table tr:hover { - background-color: var(--bg-muted); -} - -/* Buttons */ -.btn { - padding: 8px 16px; - border-radius: 4px; - cursor: pointer; - border: 1px solid transparent; - font-weight: 600; - font-size: 0.875rem; - transition: all 0.2s; -} - -.btn-primary { - background-color: var(--primary-color); - color: white; -} - -.btn-primary:hover { - background-color: var(--primary-hover); -} - -.btn-outline { - background-color: transparent; - border: 1px solid var(--border-color); - color: var(--text-main); -} - -.btn-outline:hover { - background-color: var(--bg-muted); -} - -/* Dashboard Stats - Border based */ -.dashboard-stats { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 0; - margin-bottom: 48px; - border-top: 1px solid var(--border-color); - border-bottom: 1px solid var(--border-color); -} - -.stat-card { - padding: 24px; - display: flex; - flex-direction: column; - border-right: 1px solid var(--border-color); -} - -.stat-card:last-child { - border-right: none; -} - -.stat-label { - font-size: 0.875rem; - font-weight: 500; - color: var(--text-muted); - margin-bottom: 12px; -} - -.stat-value { - font-size: 2rem; - font-weight: 700; - color: var(--primary-color); -} - -/* Modal Styles */ -.modal-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); - display: flex; - justify-content: center; - align-items: center; - z-index: 1000; - padding: 20px; -} - -.modal-content { - background-color: var(--bg-default); - width: 100%; - max-width: 800px; - border-radius: 8px; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - overflow: hidden; - display: flex; - flex-direction: column; - max-height: 90vh; -} - -.modal-header { - background-color: var(--primary-color); - color: white; - padding: 16px 24px; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - display: flex; - justify-content: space-between; - align-items: center; -} - -.modal-close-btn { - background: none; - border: none; - color: white; - font-size: 1.5rem; - line-height: 1; - cursor: pointer; - padding: 4px; - opacity: 0.8; - transition: opacity 0.2s; -} - -.modal-close-btn:hover { - opacity: 1; -} - -.modal-body { - padding: 24px; - overflow-y: auto; - flex: 1; -} - -.detail-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 16px 24px; -} - -.detail-item { - display: flex; - flex-direction: column; - gap: 6px; -} - -.detail-item.full-width { - grid-column: 1 / -1; -} - -.detail-item label { - font-size: 0.8125rem; - font-weight: 600; - color: var(--text-main); -} - -.detail-value { - padding: 10px 12px; - border: 1px solid var(--border-color); - border-radius: 4px; - font-size: 0.875rem; - color: var(--text-muted); - background-color: var(--bg-default); - min-height: 20px; -} - -.modal-footer { - padding: 16px 24px; - border-top: 1px solid var(--border-color); - display: flex; - justify-content: flex-end; - background-color: var(--bg-muted); -} - diff --git a/backup_temp/src/App.tsx b/backup_temp/src/App.tsx deleted file mode 100644 index fbaa585..0000000 --- a/backup_temp/src/App.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useState } from 'react' -import './App.css' -import AssetManagementView from './components/AssetManagementView' -import HardwareManagementView from './components/HardwareManagementView' - -function App() { - const [activeMenu, setActiveMenu] = useState('assets') - - const renderContent = () => { - switch (activeMenu) { - case 'assets': - return - case 'hardware': - return - default: - return - } - } - - return ( -
-
-
- ITAM System -
- -
-
- {renderContent()} -
-
- ) -} - -export default App diff --git a/backup_temp/src/components/AssetManagementView.tsx b/backup_temp/src/components/AssetManagementView.tsx deleted file mode 100644 index 3cc60ce..0000000 --- a/backup_temp/src/components/AssetManagementView.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import { useState } from 'react' -import { idcServers, idcStorages, IdcServer } from '../data/idcData' -import ServerDetailModal from './ServerDetailModal' - -const AssetManagementView = () => { - const [viewMode, setViewMode] = useState<'server' | 'storage'>('server') - const [selectedServer, setSelectedServer] = useState(null) - - return ( -
-
-
전산자산관리대장 (IDC)
-
- - -
-
- -
-
-

- {viewMode === 'server' ? 'IDC 서버 상세 정보' : 'IDC 스토리지 상세 정보'} -

-
- - {viewMode === 'server' ? ( - - - - - - - - - - - - - - - - - {idcServers.map((server) => ( - setSelectedServer(server)} style={{ cursor: 'pointer' }}> - - - - - - - - - - - - ))} - -
회사서버번호구분설치위치관리자IP 주소접속 정보H/W 사양OS구매일
{server.company}{server.serverNo} -
{server.category}
- {server.remarks &&
{server.remarks}
} -
{server.location} -
{server.managerPrimary ? `정: ${server.managerPrimary}` : '정: -'}
-
{server.managerSecondary ? `부: ${server.managerSecondary}` : '부: -'}
-
-
{server.ip1}
- {server.ip2 &&
{server.ip2}
} -
- {server.remoteAccess.map((access, idx) => ( -
-
- {access.tool} - {access.id} -
-
- PW: {access.pw} -
-
- ))} -
-
{server.model}
-
{server.cpu} / {server.ram}
-
{server.storage.join(' + ')}
-
{server.os}{server.purchaseDate}
- ) : ( - - - - - - - - - - - - - - - - - {idcStorages.map((storage) => ( - - - - - - - - - - - - - ))} - -
회사서버번호구분설치위치관리자IP 주소접속 정보모델명용량구매일
{storage.company}{storage.serverNo} -
{storage.category}
- {storage.remarks &&
{storage.remarks}
} -
{storage.location} - 정: {storage.managerPrimary} - 부: {storage.managerSecondary} - {storage.ip} - {storage.remoteAccess.map((access, idx) => ( -
-
- {access.tool} - {access.id} -
-
- PW: {access.pw} -
-
- ))} -
{storage.model}{storage.capacity}{storage.purchaseDate}
- )} -
- - {selectedServer && ( - setSelectedServer(null)} - /> - )} -
- ) -} - -export default AssetManagementView diff --git a/backup_temp/src/components/DashboardView.tsx b/backup_temp/src/components/DashboardView.tsx deleted file mode 100644 index d1c98d0..0000000 --- a/backup_temp/src/components/DashboardView.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { mockCategories } from '../data/mockData' - -const DashboardView = () => { - return ( -
-
-
대시보드
-
- -
-
-
전체 자산
-
8개
-
- {mockCategories.map(cat => ( -
-
{cat.name}
-
{cat.count}개
-
- ))} -
- -
-

최근 변경 내역

- - - - - - - - - - - - - - - - - - - - -
날짜내용사용자
2023-04-11PC 신규 등록이관형
2023-04-10모니터 부서 할당 변경관리자
-
-
- ) -} - -export default DashboardView diff --git a/backup_temp/src/components/HardwareManagementView.tsx b/backup_temp/src/components/HardwareManagementView.tsx deleted file mode 100644 index e23805f..0000000 --- a/backup_temp/src/components/HardwareManagementView.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { useState } from 'react' -import { mockHardwareSpecs, HardwareSpec } from '../data/mockData' - -const SpecModal = ({ spec, onClose }: { spec: HardwareSpec, onClose: () => void }) => { - return ( -
-
-
-

상세 사양 정보

- -
-
- PC명: {spec.pcName} - 사용자: {spec.userName} - 부서: {spec.department} - OS: {spec.os} - CPU: {spec.cpu} - Memory: {spec.memory} - Disk: {spec.disk} - MAC: {spec.macAddress} - IP: {spec.ipAddress} - Graphic: {spec.graphicCard} -
-
- -
-
-
- ) -} - -const HardwareManagementView = () => { - const [selectedSpec, setSelectedSpec] = useState(null) - - return ( -
-
-
H/W 사양 정보
-
- - - - - - - - - - - - - - - {mockHardwareSpecs.map(spec => ( - - - - - - - - - - ))} - -
PC명부서사용자OSCPUIP주소상세
{spec.pcName}{spec.department}{spec.userName}{spec.os.split(' ')[2]}{spec.cpu.split('@')[0]}{spec.ipAddress} - -
- - {selectedSpec && ( - setSelectedSpec(null)} /> - )} -
- ) -} - -export default HardwareManagementView diff --git a/backup_temp/src/components/ServerDetailModal.tsx b/backup_temp/src/components/ServerDetailModal.tsx deleted file mode 100644 index 39d477b..0000000 --- a/backup_temp/src/components/ServerDetailModal.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import React, { useEffect } from 'react'; -import { IdcServer } from '../data/idcData'; - -interface ServerDetailModalProps { - server: IdcServer; - onClose: () => void; -} - -const ServerDetailModal: React.FC = ({ server, onClose }) => { - // ESC 키로 모달 닫기 - useEffect(() => { - const handleEsc = (event: KeyboardEvent) => { - if (event.key === 'Escape') { - onClose(); - } - }; - window.addEventListener('keydown', handleEsc); - return () => { - window.removeEventListener('keydown', handleEsc); - }; - }, [onClose]); - - return ( -
-
e.stopPropagation()}> -
-

{server.category} ({server.serverNo})

- -
- -
-
- {/* Row 1 */} -
- -
{server.company}
-
-
- -
{server.serverNo}
-
- - {/* Row 2 */} -
- -
{server.category}
-
-
- -
{server.location}
-
- - {/* Row 3: 관리자 추가 */} -
- -
- 정: {server.managerPrimary} - 부: {server.managerSecondary} -
-
- - {/* Row 4 */} -
- -
{server.ip1 || '-'}
-
-
- -
{server.ip2 || '-'}
-
- - {/* Row 5 */} -
- -
- {server.remoteAccess.length > 0 ? ( -
- {server.remoteAccess.map((access, idx) => ( -
- {access.tool} - {access.id} - | - PW: {access.pw} -
- ))} -
- ) : '-'} -
-
- - {/* Row 6 */} -
- -
{server.model || '-'}
-
-
- -
{server.os || '-'}
-
- - {/* Row 7 */} -
- -
{server.cpu || '-'}
-
-
- -
{server.ram || '-'}
-
- - {/* Row 8 */} -
- -
{server.storage.length > 0 ? server.storage.join(' + ') : '-'}
-
- - {/* Row 9 */} -
- -
{server.purchaseDate || '-'}
-
-
- -
{server.monitoring || '-'}
-
- - {/* Row 10 */} -
- -
{server.remarks || '-'}
-
-
-
- -
- - -
-
-
- ); -}; - -export default ServerDetailModal; diff --git a/backup_temp/src/data/idcData.ts b/backup_temp/src/data/idcData.ts deleted file mode 100644 index 94fd214..0000000 --- a/backup_temp/src/data/idcData.ts +++ /dev/null @@ -1,608 +0,0 @@ -export interface RemoteAccess { - tool: string; - ip?: string; - id: string; - pw: string; -} - -export interface IdcServer { - company: string; - serverNo: string; - category: string; - remarks: string; - location: string; - managerPrimary: string; - managerSecondary: string; - ip1: string; - ip2: string; - remoteAccess: RemoteAccess[]; - monitoring: string; - serverIdMatch: string; - model: string; - os: string; - cpu: string; - ram: string; - storage: string[]; - purchaseDate: string; -} - -export interface IdcStorage { - company: string; - serverNo: string; - category: string; - remarks: string; - location: string; - managerPrimary: string; - managerSecondary: string; - ip: string; - managementIp?: string; - remoteAccess: RemoteAccess[]; - model: string; - capacity: string; - purchaseDate: string; -} - -export const idcServers: IdcServer[] = [ - { - company: "한맥", - serverNo: "hm-idc-001", - category: "한맥 인트라넷", - remarks: "", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.70", - ip2: "192.168.10.5", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "samanerp1!" }, - { tool: "Remote Util", id: "211.206.127.70", pw: "1234아이티!" } - ], - monitoring: "win exp, raid X", - serverIdMatch: "srv07d330084", - model: "HPE ProLiant DL360 Gen10", - os: "Windows Server 2016", - cpu: "intel xeon silver4110 CPU @2.10GHz", - ram: "32GB", - storage: ["280GB", "2.7TB"], - purchaseDate: "2020.12.10" - }, - { - company: "한맥", - serverNo: "hm-idc-002", - category: "한맥 인트라넷 예비", - remarks: "단가, 입사자지원 서버 (스마트 건설 용도 구매)", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.78", - ip2: "192.168.10.13", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "Hanmac2141!" } - ], - monitoring: "win exp, raid X", - serverIdMatch: "srcff5294c84", - model: "HPE ProLiant DL360 Gen10", - os: "Windows Server 2019", - cpu: "intel xeon silver4214R CPU @2.40GHz", - ram: "32GB", - storage: ["280GB", "2.7TB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-001", - category: "삼안 인트라넷", - remarks: "", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.237", - ip2: "erp.samaneng.com", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "samanerp1!" }, - { tool: "Remote Util", id: "118.220.172.237", pw: "1234아이티!" } - ], - monitoring: "O", - serverIdMatch: "newSmintranet", - model: "HPE ProLiant DL360 Gen10", - os: "Windows Server 2016", - cpu: "intel xeon silver4214R CPU @2.40GHz", - ram: "32GB", - storage: ["280GB", "3.27TB"], - purchaseDate: "2019.12.20" - }, - { - company: "삼안", - serverNo: "sa-idc-002", - category: "삼안 인트라넷 예비", - remarks: "", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.249", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "samanerp1!" }, - { tool: "Remote Util", id: "678-605-383-130", pw: "1234아이티!" } - ], - monitoring: "설치 X", - serverIdMatch: "INTRANET", - model: "HPE ProLiant DL360 GEN9", - os: "Windows Server 2008 R2", - cpu: "Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz", - ram: "32GB", - storage: ["279GB", "2.72TB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-003", - category: "SATIS 01", - remarks: "구 SATIS 서버, 세금계산서 발행(회계)", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.228", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "satissg11707808" } - ], - monitoring: "설치 X", - serverIdMatch: "satis01", - model: "HPE ProLiant DL380p GEN8", - os: "Windows Server 2008 R2", - cpu: "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz", - ram: "20GB", - storage: ["100GB", "458GB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-004", - category: "SATIS 02", - remarks: "SATIS 리뉴얼 버전 (ERP 서버)", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.229", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "satissg11707808" } - ], - monitoring: "설치 X", - serverIdMatch: "satis02", - model: "HPE ProLiant DL380p GEN8", - os: "Windows Server 2008 R2", - cpu: "Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz", - ram: "20GB", - storage: ["100GB", "458GB", "18.1TB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-005", - category: "웹 서버", - remarks: "남양주 테스트 서버 (도메인 관리 기능 제거 2026.03.11)", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "samanweb.cafe24.com", - ip2: "118.220.172.195", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "saman+2013+web" } - ], - monitoring: "win exp, 포트 안열림", - serverIdMatch: "www", - model: "HPE ProLiant DL380p GEN8", - os: "Windwos Server 2012", - cpu: "Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz", - ram: "16GB", - storage: ["100GB", "230GB", "230GB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-006", - category: "PQ DB 서버", - remarks: "", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.231", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "7013ddj10235!" } - ], - monitoring: "O", - serverIdMatch: "src5dd67f2ed", - model: "HPE ProLiant DL360 Gen10", - os: "Windows Server 2019", - cpu: "intel xeon silver4210R CPU @2.40GHz", - ram: "32GB", - storage: ["278GB", "2.18TB"], - purchaseDate: "2024.12.16" - }, - { - company: "삼안", - serverNo: "sa-idc-007", - category: "Oracle DB 서버", - remarks: "", - location: "서관 202번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.225", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "7013ddj10235!" } - ], - monitoring: "win exp, raid X", - serverIdMatch: "SAMAN-DB", - model: "HPE ProLiant DL380 GEN9", - os: "Windows Server 2012", - cpu: "Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz", - ram: "64GB", - storage: ["558GB", "1.09TB", "1.09TB"], - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-idc-008", - category: "안전관리", - remarks: "삼안 개발서버2 - AI, SSL, 장헌TBM, 노드", - location: "서관 202번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "1.234.37.171", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "samanerp1!" } - ], - monitoring: "연결 X", - serverIdMatch: "", - model: "HPE ProLiant DL380 GEN10", - os: "Windwos Server 2022", - cpu: "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - ram: "128GB", - storage: ["278GB", "3.27TB"], - purchaseDate: "2025.04.10" - }, - { - company: "삼안", - serverNo: "sa-idc-009", - category: "가족사 공통메뉴", - remarks: "삼안 개발서버1 - QNA, 급여명세서", - location: "서관 202번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "118.220.172.233", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "samanerp1!" } - ], - monitoring: "O", - serverIdMatch: "srcc9ac928ee", - model: "HPE ProLiant DL380 GEN10", - os: "Windwos Server 2022", - cpu: "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - ram: "128GB", - storage: ["278GB", "3.27TB"], - purchaseDate: "2025.04.10" - }, - { - company: "한라", - serverNo: "hl-idc-001", - category: "한라 인트라넷", - remarks: "인트라넷,안전, 운영, MISO 서버로 운영 중(win 2008)", - location: "동관 54번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "1.234.37.143", - ip2: "", - remoteAccess: [ - { tool: "Remote Util", id: "1.234.37.143", pw: "1234dkdlxl!" } - ], - monitoring: "설치 X", - serverIdMatch: "", - model: "HPE ProLiant DL360 GEN9", - os: "Windows Server 2008 R2", - cpu: "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz", - ram: "8GB", - storage: ["299GB", "631GB"], - purchaseDate: "" - }, - { - company: "한라", - serverNo: "hl-idc-002", - category: "안전전산화 서버 (디자인팀 웹)", - remarks: "인트라넷 서버 다운 시 백업용 대기", - location: "동관 54번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "1.234.37.144", - ip2: "192.168.20.49", - remoteAccess: [ - { tool: "Remote Util", id: "1.234.37.144", pw: "1234dkdlxl!" } - ], - monitoring: "O", - serverIdMatch: "", - model: "HPE ProLiant DL360 GEN9", - os: "Windows Server 2012", - cpu: "Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz", - ram: "8GB", - storage: ["299GB", "631GB"], - purchaseDate: "" - }, - { - company: "한라", - serverNo: "hl-idc-003", - category: "개발서버2", - remarks: "PTC 연구비로 구매한 예비서버2", - location: "동관 53번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "192.168.20.171", - ip2: "1.234.37.171", - remoteAccess: [ - { tool: "Remote Util", id: "1.234.37.171", pw: "1234dkdlxl!" } - ], - monitoring: "O", - serverIdMatch: "", - model: "HPE ProLiant DL380 Gen10", - os: "Windows Server 2019 Standard", - cpu: "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - ram: "32GB", - storage: ["280GB", "1TB"], - purchaseDate: "2022.09.21" - }, - { - company: "장헌", - serverNo: "jh-idc-001", - category: "장헌인트라넷", - remarks: "BEPs", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.71", - ip2: "192.168.10.6", - remoteAccess: [ - { tool: "Remote Util", id: "211.206.127.71", pw: "1234dkdlxl!" }, - { tool: "원격데스크탑", id: "administrator", pw: "Hanmac2141!%" } - ], - monitoring: "잠금 걸려있음", - serverIdMatch: "src775d3e5df", - model: "HPE ProLiant DL380 GEN10", - os: "Windows Server 2019", - cpu: "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - ram: "32GB", - storage: ["280GB", "1TB"], - purchaseDate: "2022.09.21" - }, - { - company: "장헌", - serverNo: "jh-idc-002", - category: "장헌 인트라넷 예비", - remarks: "", - location: "동관 53번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "1.234.37.170", - ip2: "192.168.20.170", - remoteAccess: [ - { tool: "Remote Util", id: "1.234.37.170", pw: "1234dkdlxl!" }, - { tool: "원격데스크탑", id: "Administrator", pw: "Hanmac2141!" } - ], - monitoring: "원격 X, O", - serverIdMatch: "", - model: "HPE ProLiant DL360 Gen10", - os: "Windows Server 2019", - cpu: "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - ram: "32GB", - storage: ["280GB", "1TB"], - purchaseDate: "2022.04.01" - }, - { - company: "장헌", - serverNo: "jh-idc-003", - category: "인트라넷(구)", - remarks: "현재는 GIT 백업 으로 사용", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.110", - ip2: "192.168.10.40", - remoteAccess: [ - { tool: "Remote Util", id: "211.206.127.110", pw: "1234dkdlxl!" }, - { tool: "원격데스크탑", id: "User", pw: "Hanmac2141!" } - ], - monitoring: "", - serverIdMatch: "", - model: "", - os: "Windows Server 2019", - cpu: "Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz", - ram: "", - storage: [], - purchaseDate: "" - }, - { - company: "(주)장헌", - serverNo: "jh-idc-004", - category: "(주) 장헌 인트라넷", - remarks: "2025.12.23 IDC 이전 설치", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.76", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "User", pw: "Hanmac2141!%" } - ], - monitoring: "win exp, raid X", - serverIdMatch: "DESKTOP-5IL75B7", - model: "", - os: "Windows 10", - cpu: "12th Gen Intel(R) Core(TM) i7-12700F", - ram: "32GB", - storage: ["465GB", "1.81TB"], - purchaseDate: "" - }, - { - company: "PTC", - serverNo: "ptc-idc-001", - category: "PTC인트라넷", - remarks: "2024.05.22 인트라넷서버로 교체", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.72", - ip2: "192.168.10.7", - remoteAccess: [ - { tool: "Remote Util", id: "211.206.127.72", pw: "1234dkdlxl!" } - ], - monitoring: "설치 X", - serverIdMatch: "", - model: "SYSTEM X3650 M2", - os: "Windows Server 2008 R2", - cpu: "Intel(R) Xeon(R) CPU E5520 @ 2.27GHz", - ram: "16GB", - storage: ["556GB"], - purchaseDate: "" - }, - { - company: "PTC", - serverNo: "ptc-idc-002", - category: "예비서버", - remarks: "PTC 인트라넷 예비서버", - location: "서관 204번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "192.168.10.8", - ip2: "", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "1234dkdlxl!" } - ], - monitoring: "O", - serverIdMatch: "", - model: "HPE ProLiant DL360 GEN10", - os: "Windows Server 2019", - cpu: "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - ram: "32GB", - storage: ["278GB", "1.09TB"], - purchaseDate: "2022.04.01" - }, - { - company: "PTC", - serverNo: "ptc-idc-003", - category: "DB 백업 서버", - remarks: "2024.05.22 변경 (데스크탑)", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.74", - ip2: "192.168.10.9", - remoteAccess: [ - { tool: "Remote Util", id: "211.206.127.74", pw: "1234dkdlxl!" } - ], - monitoring: "설치 X", - serverIdMatch: "", - model: "", - os: "Window 7", - cpu: "Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz", - ram: "4GB", - storage: ["593GB", "1.23TB"], - purchaseDate: "" - }, - { - company: "바론", - serverNo: "br-idc-001", - category: "인트라넷", - remarks: "", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "211.206.127.75", - ip2: "192.168.10.10", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "Hanmac2141!%" } - ], - monitoring: "O", - serverIdMatch: "srcf0136042d", - model: "HPE ProLiant DL360 GEN10", - os: "Windows Server 2022", - cpu: "Intel Xeon(R) Silver 4210R CPU @ 2.40GHz", - ram: "32GB", - storage: ["280GB", "2.18TB"], - purchaseDate: "2025.04.14" - }, - { - company: "현타", - serverNo: "ht-idc-001", - category: "인트라넷", - remarks: "", - location: "동관 53번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip1: "1.234.37.172", - ip2: "192.168.20.172", - remoteAccess: [ - { tool: "원격데스크탑", id: "administrator", pw: "Hanmac2141!" } - ], - monitoring: "O", - serverIdMatch: "src901e49933", - model: "HPE ProLiant DL380 GEN10", - os: "Windows Server 2019", - cpu: "Intel Xeon Silver 4210R CPU @ 2.40GHz", - ram: "32GB", - storage: ["280GB", "1TB"], - purchaseDate: "2022.09.21" - } -]; - -export const idcStorages: IdcStorage[] = [ - { - company: "삼안", - serverNo: "sa-nas-001", - category: "인트라넷 백업 스토리지", - remarks: "", - location: "서관 203번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip: "118.220.172.246", - remoteAccess: [{ tool: "원격", id: "administrator", pw: "sg11707808" }], - model: "Promiss R Series", - capacity: "36TB", - purchaseDate: "" - }, - { - company: "삼안", - serverNo: "sa-nas-002", - category: "성과품 스토리지", - remarks: "매니지먼트 접속 확인 불가", - location: "서관 205번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip: "118.220.172.248", - managementIp: "118.220.172.247", - remoteAccess: [{ tool: "원격", id: "administrator", pw: "sg11707808" }], - model: "ENC_3U_16BAY_D", - capacity: "23TB", - purchaseDate: "2019.06.03" - }, - { - company: "삼안", - serverNo: "sa-nas-003", - category: "성과품 백업 스토리지", - remarks: "", - location: "서관 202번", - managerPrimary: "김철수", - managerSecondary: "홍길동", - ip: "118.220.172.241", - managementIp: "118.220.172.240", - remoteAccess: [ - { tool: "원격", id: "administrator", pw: "saman1!" }, - { tool: "원격", id: "admin0", pw: "Root1234" } - ], - model: "Promiss R Series", - capacity: "48TB", - purchaseDate: "2025.03.13" - } -]; diff --git a/backup_temp/src/data/mockData.ts b/backup_temp/src/data/mockData.ts deleted file mode 100644 index d848549..0000000 --- a/backup_temp/src/data/mockData.ts +++ /dev/null @@ -1,84 +0,0 @@ -export interface Category { - id: string; - name: string; - count: number; -} - -export interface Asset { - id: string; - categoryName: string; - name: string; - quantity: number; - internalCode: string; - serialNumber: string; - department: string; - user: string; - acquisitionDate: string; - status: string; - location: string; -} - -export interface HardwareSpec { - id: string; - pcName: string; - department: string; - userName: string; - os: string; - cpu: string; - memory: string; - disk: string; - macAddress: string; - ipAddress: string; - graphicCard: string; -} - -export const mockCategories: Category[] = [ - { id: '1', name: 'PC', count: 1 }, - { id: '2', name: '모니터', count: 5 }, - { id: '3', name: '노트북', count: 2 }, -]; - -export const mockAssets: Asset[] = [ - { - id: '1', - categoryName: 'PC', - name: 'PC', - quantity: 1, - internalCode: 'PC20230411001', - serialNumber: 'SN-001-A1', - department: '한맥기술', - user: '이관형', - acquisitionDate: '2023-04-11', - status: '정상', - location: '본사 3층', - }, -]; - -export const mockHardwareSpecs: HardwareSpec[] = [ - { - id: '1', - pcName: 'DESKTOP-G1DVL26', - department: '한맥기술', - userName: '이준권', - os: 'Microsoft Windows 10 Pro 10.0.19044', - cpu: 'Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz', - memory: 'Samsung 4 GB / Samsung 4 GB', - disk: 'ST2000DM001-1CH164 1.82 TB / Samsung SSD 850 EVO 120GB', - macAddress: '0862664B98A3', - ipAddress: '172.16.9.68', - graphicCard: 'NVIDIA GeForce GTX 750', - }, - { - id: '2', - pcName: 'DESKTOP-BNBPOUP', - department: '한맥기술', - userName: '주완기 연구원', - os: 'Microsoft Windows 10 Pro 10.0.19045', - cpu: 'Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz', - memory: 'Samsung 8 GB / Samsung 8 GB', - disk: 'ST1000DM003-1CH162 931.51 GB / Samsung SSD 840 EVO 120GB', - macAddress: 'E03F4948ECC6', - ipAddress: '172.16.9.23', - graphicCard: 'Intel(R) HD Graphics 4600', - }, -]; diff --git a/backup_temp/src/index.css b/backup_temp/src/index.css deleted file mode 100644 index cc457c7..0000000 --- a/backup_temp/src/index.css +++ /dev/null @@ -1,26 +0,0 @@ -:root { - font-family: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; - line-height: 1.5; - font-weight: 400; - letter-spacing: -0.02em; - - color-scheme: light; - color: #111827; - background-color: #F9FAFB; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body { - margin: 0; - display: flex; - min-width: 320px; - min-height: 100vh; -} - -#root { - width: 100%; -} diff --git a/backup_temp/src/main.tsx b/backup_temp/src/main.tsx deleted file mode 100644 index 3d7150d..0000000 --- a/backup_temp/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './index.css' - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - , -) diff --git a/backup_temp/서버목록 및 IDC 서버 위치 - 서버 및 스토리지 목록(IDC).csv b/backup_temp/서버목록 및 IDC 서버 위치 - 서버 및 스토리지 목록(IDC).csv deleted file mode 100644 index 509bafe..0000000 --- a/backup_temp/서버목록 및 IDC 서버 위치 - 서버 및 스토리지 목록(IDC).csv +++ /dev/null @@ -1,49 +0,0 @@ -IDC,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -서버목록,,,,,,,,,,,,,,,,,,,,,,,,,,한맥,LMS 서버,mdf, -회사,서버번호,구분,비고,설치위치,담당자,,IP 주소,,원격접속,,,모니터링 여부,"서버 이름 ID - 일치 여부, 전 서버 이름",제조사 및 모델명,OS,CPU,RAM,Storage1,Storage2,Storage3,계산서,,,,,삼안,XR플래그십 스토리지,,20250414 -,,,,,정,부,IP,IP2,접속도구,아이디,비빌번호,,,,,,,,,,,,,,,장헌,"스토리지, 서버",mdf 추정, -한맥,hm-idc-001,한맥 인트라넷,,서관 204번,,,211.206.127.70,192.168.10.5,원격데스크탑,administrator,samanerp1!,"win exp, raid X",srv07d330084,HPE ProLiant DL360 Gen10,Windows Server 2016,intel xeon silver4110 CPU @2.10GHz 2.10GHZ,32GB,280GB,2.7TB,,20201210 추정,한맥,,,,한라,백업서버,mdf, -,,,,,,,,,Remote Util,211.206.127.70,1234아이티!,,,,,,,,,,,,,,,,,, -,hm-idc-002,한맥 인트라넷 예비,"단가, 입사자지원 서버 (4/1 장헌산업 이름으로 스마트 건설 용도 구매)",서관 205번,,,211.206.127.78,192.168.10.13,원격데스크탑,administrator,Hanmac2141!,"win exp, raid X",srcff5294c84,HPE ProLiant DL360 Gen10,Windows Server 2019,intel xeon silver4214R CPU @2.40GHz 2.39GHZ,32GB,280GB,2.7TB,,,,,,,,,, -삼안,sa-idc-001,삼안 인트라넷,,서관 204번,,,118.220.172.237,erp.samaneng.com,원격데스크탑,administrator,samanerp1!,O,newSmintranet,HPE ProLiant DL360 Gen10,Windows Server 2016,intel xeon silver4214R CPU @2.40GHz 2.39GHZ,32GB,280GB,3.27TB,,20191220 추정,삼안,,,,,,, -,,,,,,,,,Remote Util,118.220.172.237,1234아이티!,,,,,,,,,,,,,,,,,, -,sa-idc-002,삼안 인트라넷 예비,,서관 204번,,,118.220.172.249,,원격데스크탑,administrator,samanerp1!,설치 X,INTRANET,HPE ProLiant DL360 GEN9,Windows Server 2008 R2,Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 2.40GHz,32GB,279GB,2.72TB,,,,,,,,,, -,,,,,,,,,Remote Util,678-605-383-130,1234아이티!,,,,,,,,,,,,,,,,,, -,sa-idc-003,SATIS 01,"구 SATIS 서버, 세금계산서 발행(회계)",서관 204번,,,118.220.172.228,,원격데스크탑,administrator,satissg11707808,설치 X,satis01,HPE ProLiant DL380p GEN8,Windows Server 2008 R2,Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz,20GB,100GB,458GB,,,,,,,,,, -,sa-idc-004,SATIS 02,SATIS 리뉴얼 버전 (ERP 서버),서관 204번,,,118.220.172.229,,원격데스크탑,administrator,satissg11707808,설치 X,satis02,HPE ProLiant DL380p GEN8,Windows Server 2008 R2,Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz 3.30GHz,20GB,100GB,458GB,18.1TB,,,,,,,,, -,sa-idc-005,웹 서버,남양주 테스트 서버 (도메인 관리 기능 제거 2026.03.11),서관 204번,,,samanweb.cafe24.com,118.220.172.195,원격데스크탑,administrator,saman+2013+web,"win exp, 포트 안열림",www,HPE ProLiant DL380p GEN8,Windwos Server 2012,Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 2.40GHz,16GB,100GB,230GB,230GB,,,,,,,,, -,sa-idc-006,PQ DB 서버,,서관 204번,,,118.220.172.231,,원격데스크탑,administrator,7013ddj10235!, O,src5dd67f2ed,HPE ProLiant DL360 Gen10,Windows Server 2019,intel xeon silver4210R CPU @2.40GHz 2.39GHZ,32GB,278GB,2.18TB,,20241216 구매교체,삼안,,,,,,, -,sa-idc-007,Oracle DB 서버,,서관 202번,,,118.220.172.225,,원격데스크탑,administrator,7013ddj10235!,"win exp, raid X",SAMAN-DB,HPE ProLiant DL380 GEN9,Windows Server 2012,Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz 2.20GHz,64GB,558GB,1.09TB,1.09TB,,,,,,,,, -,sa-idc-008,안전관리,"삼안 개발서버2 - AI, SSL, 장헌TBM, 노드",서관 202번,,,1.234.37.171,,원격데스크탑,administrator,samanerp1!,연결 X,,HPE ProLiant DL380 GEN10,Windwos Server 2022,Intel Xeon(R) Silver 4210R CPU @ 2.40GHz,128GB,278GB,3.27TB,,20250410 설치,삼안,,,,,,, -,sa-idc-009,가족사 공통메뉴,"삼안 개발서버1 - QNA, 급여명세서",서관 202번,,,118.220.172.233,,원격데스크탑,administrator,samanerp1!,O,srcc9ac928ee,HPE ProLiant DL380 GEN10,Windwos Server 2022,Intel Xeon(R) Silver 4210R CPU @ 2.40GHz,128GB,278GB,3.27TB,,20250410 설치,삼안,,,,,,, -한라,hl-idc-001,한라 인트라넷,"인트라넷,안전, 운영, MISO 서버로 운영 중(win 2008)",동관 54번,,,1.234.37.143,,Remote Util,1.234.37.143,1234dkdlxl!,설치 X,,HPE ProLiant DL360 GEN9,Windows Server 2008 R2,Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz,8GB,299GB,631GB,,,,,,,,,, -,hl-idc-002,안전전산화 서버 (디자인팀 웹),"인트라넷 서버 다운 시 백업용 대기, (임시) 디자인팀 웹 퍼블리싱 서버",동관 54번,,,1.234.37.144,192.168.20.49,Remote Util,1.234.37.144,1234dkdlxl!,O,,HPE ProLiant DL360 GEN9,Windows Server 2012,Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 1.70GHz,8GB,299GB,631GB,,,,,,,,,, -,hl-idc-003,개발서버2,PTC 연구비로 구매한 예비서버2 ,동관 53번,,,192.168.20.171,1.234.37.171,Remote Util,1.234.37.171,1234dkdlxl!,O,,HPE ProLiant DL380 Gen10,Windows Server 2019 Standard,Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz,32GB,280GB,1TB,,20220921 추정,ptc,,,,,,, -,,,"이전 : 하수도자산 소스+프로그램 현재 : 큰길 서비스용 xampp+ PostgreSQL, BEPs",,,,,,원격데스크탑,administrator,Hanmac2141!%,,src775d3e5df,,,,,,,,,,,,,,,, -장헌,jh-idc-001,장헌인트라넷,,서관 205번,,,211.206.127.71,192.168.10.6,Remote Util,211.206.127.71,1234dkdlxl!,잠금 걸려있음,,HPE ProLiant DL380 GEN10,Windows Server 2019,Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz,32GB,280GB,1TB,,20220921 추정,ptc,,,,,,, -,jh-idc-002,장헌 인트라넷 예비,,동관 53번,,,1.234.37.170,192.168.20.170,Remote Util,1.234.37.170,1234dkdlxl!,"원격 X, O -",,HPE ProLiant DL360 Gen10,Windows Server 2019,Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz 2.39GHz,32GB,280GB,1TB,,20220401 추정,장헌,,,,,,, -,,,,,,,,,원격데스크탑,Administrator,Hanmac2141!,,,,,,,,,,,,,,,,,, -,jh-idc-003,인트라넷(구),현재는 GIT 백업 으로 사용,서관 205번,,,211.206.127.110,192.168.10.40,Remote Util,211.206.127.110,1234dkdlxl!,,,,Windows Server 2019,Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz,,,,,,,,,,,,, -,,,,,,,,,원격데스크탑,User,Hanmac2141!,,,,,,,,,,,,,,,,,, -(주)장헌,jh-idc-004,(주) 장헌 인트라넷,2025.12.23 (주) 장헌 센터 MDF에서 IDC로 이전 설치,서관 205번,,,211.206.127.76,,원격데스크탑,User,Hanmac2141!%,"win exp, raid X",DESKTOP-5IL75B7,,Windows 10,12th Gen Intel(R) Core(TM) i7-12700F,32GB,465GB,1.81TB,,,,,,,,,, -PTC,ptc-idc-001,PTC인트라넷,"구 파일 서버(부서자료 백업용), 2024.05.22 인트라넷서버로 교체",서관 205번,,,211.206.127.72,192.168.10.7,Remote Util,211.206.127.72,1234dkdlxl!,설치 X,,SYSTEM X3650 M2,Windows Server 2008 R2,Intel(R) Xeon(R) CPU E5520 @ 2.27GHz 2.26GHz,16GB,556GB,,,,,,,,,,, -,ptc-idc-002,예비서버,PTC 인트라넷 예비서버,서관 204번,,,192.168.10.8,,원격데스크탑,administrator,1234dkdlxl!,O,,HPE ProLiant DL360 GEN10,Windows Server 2019,Intel Xeon(R) Silver 4210R CPU @ 2.40GHz,32GB,278GB,1.09TB,,20220401 추정,장헌,,,,,,, -,ptc-idc-003,DB 백업 서버,"구 파일 인트라넷, 2024.05.22에 DB 백업 테스트 서버로 변경 (데스크탑)",서관 205번,,,211.206.127.74,192.168.10.9,Remote Util,211.206.127.74,1234dkdlxl!,설치 X,,,Window 7,Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz 2.13GHz,4GB,593GB,1.23TB,,,,,,,,,, -바론,br-idc-001,인트라넷,,서관 205번,,,211.206.127.75,192.168.10.10,원격데스크탑,administrator,Hanmac2141!%,O,srcf0136042d,HPE ProLiant DL360 GEN10,Windows Server 2022,Intel Xeon(R) Silver 4210R CPU @ 2.40GHz,32GB,280GB,2.18TB,,20250414 추정,바론,,,,,,, -현타,ht-idc-001,인트라넷,,동관 53번,,,1.234.37.172,192.168.20.172,원격데스크탑,administrator,Hanmac2141!,O,src901e49933,HPE ProLiant DL380 GEN10,Windows Server 2019,Intel Xeon Silver 4210R CPU @ 2.40GHz 2.39GHz,32GB,280GB,1TB,,20220921 추정,ptc,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -스토리지 목록,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -회사,서버번호,구분,비고,설치위치,담당자,,IP 주소,,원격접속,,,,,,모델명,용량,,,,,,,,,,,,, -,,,,,정,부,,,접속도구,아이디,비빌번호,,,,,,,,,,,,,,,,,, -삼안,sa-das-001,,"Satis01, Satis02 광케이블 연결 (물리연결)",서관 205번,,,,,,,,,,,,,,,,,,,,,,,,, -,sa-nas-001,인트라넷 백업 스토리지,,서관 203번,,,(IDC) 118.220.172.246,,원격,administrator,sg11707808,,,,Promiss R Series,36TB,,,,,,,,,,,,, -,sa-nas-002,성과품 스토리지,,서관 205번,,,(IDC) 118.220.172.248,,원격,administrator,sg11707808,,,,ENC_3U_16BAY_D // SEAGATE ST2000NM0045,23TB,,,,,20190603 추정,삼안,,,,,,, -,,,매니지먼트 접속 확인 불가 (콘솔 연결 후 페이지 오픈 필요),,,,(매니지먼트) 118.220.172.247,,원격,-,-,,,,,,,,,,,,,,,,,, -,sa-nas-003,성과품 백업 스토리지,,서관 202번,,,(IDC) 118.220.172.241,,원격,administrator,saman1!,,,,Promiss R Series,48TB,,,,,20250313,삼안,,,,,,, -,,,,,,,(매지니먼트) 118.220.172.240,,원격,admin0,Root1234,,,,,,,,,,,,,,,,,, -한라,hl-das-001,,파일서버 정보 없음(접속 불가),동관 54번,,,,,,,,,,,,,,,,,20190701 추정,한라,(한라 파일서버도 동일일자 추정),,,,,, -,hl-das-002,,,동관 54번,,,,,,,,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/backup_temp/서버목록 및 IDC 서버 위치.xlsx b/backup_temp/서버목록 및 IDC 서버 위치.xlsx deleted file mode 100644 index 8c41508..0000000 Binary files a/backup_temp/서버목록 및 IDC 서버 위치.xlsx and /dev/null differ diff --git a/batch_reformat_codes.js b/batch_reformat_codes.js deleted file mode 100644 index d0ba02f..0000000 --- a/batch_reformat_codes.js +++ /dev/null @@ -1,124 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const TYPE_PREFIX_MAP = { - '서버': 'SVR', '가상서버(VM)': 'VM', '워크스테이션': 'WKS', '서버PC': 'PC', - '개인PC': 'PC', '공용PC': 'PC', '노트북': 'NBK', '태블릿': 'TAB', - 'NAS': 'NAS', 'DAS': 'DAS', '스토리지': 'STO', '스토리지 렉': 'STO', - '스위치': 'NET', '방화벽': 'NET', '공유기': 'NET', '허브': 'NET', '네트워크': 'NET', - '모니터': 'MNT', '프린터': 'PRT', '스캐너': 'SCN', '복합기': 'MFP', '빔프로젝터': 'PRJ', '화상회의장비': 'VCF', '업무지원장비': 'EQP', - 'CPU': 'CPU', 'HDD': 'HDD', 'RAM': 'RAM', 'GPU': 'GPU', 'SSD': 'SSD', '메인보드': 'MBD', '파워서플라이': 'PWR', '쿨러': 'CLR', '케이스': 'CAS', 'PC부품': 'PRT', - '드론': 'DRO', '측량장비': 'SUR', '보조기기': 'SUR', '공간정보장비': 'SUR', - '책상': 'FRN', '의자': 'FRN', '캐비닛': 'FRN', '사무가구': 'FRN', - '구독SW': 'SW', '영구SW': 'SW', '외부': 'SW', '내부': 'INT', - '선물': 'GFT', 'VIP': 'VIP' -}; - -function formatPurchaseDate(date) { - if (!date) return '000000'; - let s = String(date).replace(/[^0-9]/g, ''); - if (s.length >= 6) { - return s.substring(0, 6); - } - return '000000'; -} - -async function reformatAllCodes() { - const connection = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - port: parseInt(process.env.DB_PORT || '3306') - }); - - try { - const tables = [ - 'asset_pc', 'asset_server', 'asset_network', 'asset_storage', - 'asset_equipment', 'asset_survey', 'asset_pc_parts', 'asset_office_supplies', - 'asset_sw_external', 'asset_sw_internal', 'asset_vip' - ]; - - let allAssets = []; - - for (const table of tables) { - try { - const [rows] = await connection.query(`SELECT * FROM ${table}`); - allAssets = allAssets.concat(rows.map(r => ({ ...r, sourceTable: table }))); - } catch (err) { - if (err.code === 'ER_NO_SUCH_TABLE') { - console.log(`Skipping missing table: ${table}`); - } else { - console.error(`Error querying ${table}:`, err.message); - } - } - } - - console.log(`Total assets loaded: ${allAssets.length}`); - - // Process each asset - const processed = allAssets.map(a => { - // 1. Determine prefix - let prefix = 'AST'; - if (a.asset_type && TYPE_PREFIX_MAP[a.asset_type]) { - prefix = TYPE_PREFIX_MAP[a.asset_type]; - } else if (a.category && TYPE_PREFIX_MAP[a.category]) { - prefix = TYPE_PREFIX_MAP[a.category]; - } else if (a.sourceTable === 'asset_sw_external') prefix = 'SW'; - else if (a.sourceTable === 'asset_sw_internal') prefix = 'INT'; - - // 2. Determine YYYYMM - const dateStr = a.purchase_date || a.start_date || ''; // start_date for SW - const yyyymm = formatPurchaseDate(dateStr); - - return { ...a, prefix, yyyymm }; - }); - - // Group by Prefix - const groups = {}; - processed.forEach(a => { - if (!groups[a.prefix]) groups[a.prefix] = []; - groups[a.prefix].push(a); - }); - - // Start renaming - for (const prefix in groups) { - const items = groups[prefix]; - - // Sort logic to maintain some order (by date then id) - items.sort((a, b) => { - if (a.yyyymm !== b.yyyymm) return a.yyyymm.localeCompare(b.yyyymm); - return String(a.id).localeCompare(String(b.id)); - }); - - console.log(`Processing group ${prefix}: ${items.length} items`); - - // Temporary rename to avoid UNIQUE constraint conflicts during sequential updates - for (const item of items) { - const tempCode = `TEMP-${Math.random().toString(36).substring(2, 10)}-${item.id}`; - await connection.query(`UPDATE ${item.sourceTable} SET asset_code = ? WHERE id = ?`, [tempCode, item.id]); - } - - for (let i = 0; i < items.length; i++) { - const item = items[i]; - const serial = String(i + 1).padStart(4, '0'); // SVR-202209-0001 - - // Some formats might want 3 or 4 digits. Defaulting to 4. - const newCode = `${prefix}-${item.yyyymm}-${serial}`; - - await connection.query(`UPDATE ${item.sourceTable} SET asset_code = ? WHERE id = ?`, [newCode, item.id]); - } - } - - console.log('✅ Asset codes reformatted successfully.'); - - } catch (err) { - console.error('❌ Reformatting failed:', err); - } finally { - await connection.end(); - } -} - -reformatAllCodes(); diff --git a/build/pc_agent/Analysis-00.toc b/build/pc_agent/Analysis-00.toc new file mode 100644 index 0000000..4601015 --- /dev/null +++ b/build/pc_agent/Analysis-00.toc @@ -0,0 +1,1834 @@ +(['D:\\이태훈\\22전산자산조사\\ITAM\\pc_agent.py'], + ['D:\\이태훈\\22전산자산조사\\ITAM'], + [], + [('C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\numpy\\_pyinstaller', + 0), + ('C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\playwright\\_impl\\__pyinstaller', + 0), + ('C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\stdhooks', + -1000), + ('C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib', + -1000)], + {}, + [], + [], + False, + {}, + 0, + [], + [], + '3.12.5 (tags/v3.12.5:ff3bc82, Aug 6 2024, 20:45:27) [MSC v.1940 64 bit ' + '(AMD64)]', + [('pyi_rth_inspect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py', + 'PYSOURCE'), + ('pyi_rth_pkgutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py', + 'PYSOURCE'), + ('pyi_rth_multiprocessing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py', + 'PYSOURCE'), + ('pyi_rth_cryptography_openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_cryptography_openssl.py', + 'PYSOURCE'), + ('pyi_rth_pywintypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pywintypes.py', + 'PYSOURCE'), + ('pyi_rth_pythoncom', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pythoncom.py', + 'PYSOURCE'), + ('pc_agent', 'D:\\이태훈\\22전산자산조사\\ITAM\\pc_agent.py', 'PYSOURCE')], + [('subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\subprocess.py', + 'PYMODULE'), + ('selectors', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\selectors.py', + 'PYMODULE'), + ('contextlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\contextlib.py', + 'PYMODULE'), + ('threading', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\threading.py', + 'PYMODULE'), + ('_threading_local', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_threading_local.py', + 'PYMODULE'), + ('signal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\signal.py', + 'PYMODULE'), + ('multiprocessing.spawn', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\spawn.py', + 'PYMODULE'), + ('multiprocessing.resource_tracker', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\resource_tracker.py', + 'PYMODULE'), + ('multiprocessing.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\util.py', + 'PYMODULE'), + ('multiprocessing.forkserver', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\forkserver.py', + 'PYMODULE'), + ('multiprocessing.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\connection.py', + 'PYMODULE'), + ('multiprocessing.resource_sharer', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\resource_sharer.py', + 'PYMODULE'), + ('xmlrpc.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xmlrpc\\client.py', + 'PYMODULE'), + ('xmlrpc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xmlrpc\\__init__.py', + 'PYMODULE'), + ('gzip', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\gzip.py', + 'PYMODULE'), + ('argparse', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\argparse.py', + 'PYMODULE'), + ('textwrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\textwrap.py', + 'PYMODULE'), + ('copy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\copy.py', + 'PYMODULE'), + ('gettext', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\gettext.py', + 'PYMODULE'), + ('_compression', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_compression.py', + 'PYMODULE'), + ('xml.parsers.expat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\parsers\\expat.py', + 'PYMODULE'), + ('xml.parsers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\parsers\\__init__.py', + 'PYMODULE'), + ('xml', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\__init__.py', + 'PYMODULE'), + ('xml.sax.expatreader', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\expatreader.py', + 'PYMODULE'), + ('xml.sax.saxutils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\saxutils.py', + 'PYMODULE'), + ('urllib.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py', + 'PYMODULE'), + ('urllib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\__init__.py', + 'PYMODULE'), + ('ipaddress', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ipaddress.py', + 'PYMODULE'), + ('fnmatch', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\fnmatch.py', + 'PYMODULE'), + ('getpass', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\getpass.py', + 'PYMODULE'), + ('nturl2path', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\nturl2path.py', + 'PYMODULE'), + ('ftplib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ftplib.py', + 'PYMODULE'), + ('netrc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\netrc.py', + 'PYMODULE'), + ('mimetypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\mimetypes.py', + 'PYMODULE'), + ('getopt', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\getopt.py', + 'PYMODULE'), + ('email.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\utils.py', + 'PYMODULE'), + ('email.charset', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\charset.py', + 'PYMODULE'), + ('email.encoders', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\encoders.py', + 'PYMODULE'), + ('quopri', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\quopri.py', + 'PYMODULE'), + ('email.errors', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\errors.py', + 'PYMODULE'), + ('email.quoprimime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\quoprimime.py', + 'PYMODULE'), + ('email.base64mime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\base64mime.py', + 'PYMODULE'), + ('email._parseaddr', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_parseaddr.py', + 'PYMODULE'), + ('calendar', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\calendar.py', + 'PYMODULE'), + ('random', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\random.py', + 'PYMODULE'), + ('statistics', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\statistics.py', + 'PYMODULE'), + ('fractions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\fractions.py', + 'PYMODULE'), + ('numbers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\numbers.py', + 'PYMODULE'), + ('http.cookiejar', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\cookiejar.py', + 'PYMODULE'), + ('http', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\__init__.py', + 'PYMODULE'), + ('ssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ssl.py', + 'PYMODULE'), + ('urllib.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\response.py', + 'PYMODULE'), + ('urllib.error', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\error.py', + 'PYMODULE'), + ('string', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\string.py', + 'PYMODULE'), + ('hashlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\hashlib.py', + 'PYMODULE'), + ('email', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\__init__.py', + 'PYMODULE'), + ('email.parser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\parser.py', + 'PYMODULE'), + ('email._policybase', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_policybase.py', + 'PYMODULE'), + ('email.feedparser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\feedparser.py', + 'PYMODULE'), + ('email.message', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\message.py', + 'PYMODULE'), + ('email.policy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\policy.py', + 'PYMODULE'), + ('email.contentmanager', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\contentmanager.py', + 'PYMODULE'), + ('email.headerregistry', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\headerregistry.py', + 'PYMODULE'), + ('email.iterators', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\iterators.py', + 'PYMODULE'), + ('email.generator', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\generator.py', + 'PYMODULE'), + ('email._encoded_words', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_encoded_words.py', + 'PYMODULE'), + ('email._header_value_parser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_header_value_parser.py', + 'PYMODULE'), + ('email.header', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\header.py', + 'PYMODULE'), + ('bisect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\bisect.py', + 'PYMODULE'), + ('xml.sax', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\__init__.py', + 'PYMODULE'), + ('xml.sax.handler', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\handler.py', + 'PYMODULE'), + ('xml.sax._exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\_exceptions.py', + 'PYMODULE'), + ('xml.sax.xmlreader', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\xmlreader.py', + 'PYMODULE'), + ('urllib.parse', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\parse.py', + 'PYMODULE'), + ('http.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\client.py', + 'PYMODULE'), + ('decimal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\decimal.py', + 'PYMODULE'), + ('_pydecimal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_pydecimal.py', + 'PYMODULE'), + ('contextvars', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\contextvars.py', + 'PYMODULE'), + ('datetime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\datetime.py', + 'PYMODULE'), + ('_pydatetime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_pydatetime.py', + 'PYMODULE'), + ('_strptime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_strptime.py', + 'PYMODULE'), + ('base64', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\base64.py', + 'PYMODULE'), + ('hmac', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\hmac.py', + 'PYMODULE'), + ('struct', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\struct.py', + 'PYMODULE'), + ('tempfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tempfile.py', + 'PYMODULE'), + ('shutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\shutil.py', + 'PYMODULE'), + ('zipfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\__init__.py', + 'PYMODULE'), + ('zipfile._path', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\_path\\__init__.py', + 'PYMODULE'), + ('zipfile._path.glob', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\_path\\glob.py', + 'PYMODULE'), + ('pathlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pathlib.py', + 'PYMODULE'), + ('py_compile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\py_compile.py', + 'PYMODULE'), + ('importlib.machinery', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\machinery.py', + 'PYMODULE'), + ('importlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\__init__.py', + 'PYMODULE'), + ('importlib._bootstrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_bootstrap.py', + 'PYMODULE'), + ('importlib._bootstrap_external', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_bootstrap_external.py', + 'PYMODULE'), + ('importlib.metadata', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\__init__.py', + 'PYMODULE'), + ('typing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\typing.py', + 'PYMODULE'), + ('importlib.abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\abc.py', + 'PYMODULE'), + ('importlib.resources.abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\abc.py', + 'PYMODULE'), + ('importlib.resources', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\__init__.py', + 'PYMODULE'), + ('importlib.resources._legacy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_legacy.py', + 'PYMODULE'), + ('importlib.resources._common', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_common.py', + 'PYMODULE'), + ('importlib.resources._adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_adapters.py', + 'PYMODULE'), + ('importlib._abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_abc.py', + 'PYMODULE'), + ('importlib.metadata._itertools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_itertools.py', + 'PYMODULE'), + ('importlib.metadata._functools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_functools.py', + 'PYMODULE'), + ('importlib.metadata._collections', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_collections.py', + 'PYMODULE'), + ('importlib.metadata._meta', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_meta.py', + 'PYMODULE'), + ('importlib.metadata._adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_adapters.py', + 'PYMODULE'), + ('importlib.metadata._text', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_text.py', + 'PYMODULE'), + ('inspect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\inspect.py', + 'PYMODULE'), + ('token', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\token.py', + 'PYMODULE'), + ('dis', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\dis.py', + 'PYMODULE'), + ('opcode', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\opcode.py', + 'PYMODULE'), + ('ast', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ast.py', + 'PYMODULE'), + ('csv', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\csv.py', + 'PYMODULE'), + ('importlib.readers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\readers.py', + 'PYMODULE'), + ('importlib.resources.readers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\readers.py', + 'PYMODULE'), + ('importlib.resources._itertools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_itertools.py', + 'PYMODULE'), + ('tokenize', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tokenize.py', + 'PYMODULE'), + ('importlib.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\util.py', + 'PYMODULE'), + ('tarfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tarfile.py', + 'PYMODULE'), + ('lzma', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\lzma.py', + 'PYMODULE'), + ('bz2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\bz2.py', + 'PYMODULE'), + ('logging', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\logging\\__init__.py', + 'PYMODULE'), + ('pickle', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py', + 'PYMODULE'), + ('pprint', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pprint.py', + 'PYMODULE'), + ('dataclasses', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\dataclasses.py', + 'PYMODULE'), + ('_compat_pickle', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_compat_pickle.py', + 'PYMODULE'), + ('multiprocessing.context', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\context.py', + 'PYMODULE'), + ('multiprocessing.popen_spawn_win32', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_spawn_win32.py', + 'PYMODULE'), + ('multiprocessing.popen_forkserver', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_forkserver.py', + 'PYMODULE'), + ('multiprocessing.popen_spawn_posix', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_spawn_posix.py', + 'PYMODULE'), + ('multiprocessing.popen_fork', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_fork.py', + 'PYMODULE'), + ('multiprocessing.sharedctypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\sharedctypes.py', + 'PYMODULE'), + ('multiprocessing.heap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\heap.py', + 'PYMODULE'), + ('ctypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ctypes\\__init__.py', + 'PYMODULE'), + ('ctypes._endian', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ctypes\\_endian.py', + 'PYMODULE'), + ('multiprocessing.pool', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\pool.py', + 'PYMODULE'), + ('multiprocessing.dummy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\dummy\\__init__.py', + 'PYMODULE'), + ('multiprocessing.dummy.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\dummy\\connection.py', + 'PYMODULE'), + ('queue', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\queue.py', + 'PYMODULE'), + ('multiprocessing.queues', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\queues.py', + 'PYMODULE'), + ('multiprocessing.synchronize', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\synchronize.py', + 'PYMODULE'), + ('multiprocessing.managers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\managers.py', + 'PYMODULE'), + ('multiprocessing.shared_memory', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\shared_memory.py', + 'PYMODULE'), + ('secrets', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\secrets.py', + 'PYMODULE'), + ('multiprocessing.reduction', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\reduction.py', + 'PYMODULE'), + ('multiprocessing.process', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\process.py', + 'PYMODULE'), + ('runpy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\runpy.py', + 'PYMODULE'), + ('pkgutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pkgutil.py', + 'PYMODULE'), + ('zipimport', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipimport.py', + 'PYMODULE'), + ('multiprocessing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\__init__.py', + 'PYMODULE'), + ('tracemalloc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tracemalloc.py', + 'PYMODULE'), + ('stringprep', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\stringprep.py', + 'PYMODULE'), + ('_py_abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_py_abc.py', + 'PYMODULE'), + ('platform', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\platform.py', + 'PYMODULE'), + ('socket', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\socket.py', + 'PYMODULE'), + ('json', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\__init__.py', + 'PYMODULE'), + ('json.encoder', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\encoder.py', + 'PYMODULE'), + ('json.decoder', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\decoder.py', + 'PYMODULE'), + ('json.scanner', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\scanner.py', + 'PYMODULE'), + ('requests', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\__init__.py', + 'PYMODULE'), + ('requests.status_codes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\status_codes.py', + 'PYMODULE'), + ('requests.structures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\structures.py', + 'PYMODULE'), + ('requests.compat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\compat.py', + 'PYMODULE'), + ('http.cookies', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\cookies.py', + 'PYMODULE'), + ('requests.models', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\models.py', + 'PYMODULE'), + ('idna', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\__init__.py', + 'PYMODULE'), + ('idna.package_data', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\package_data.py', + 'PYMODULE'), + ('idna.intranges', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\intranges.py', + 'PYMODULE'), + ('idna.core', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\core.py', + 'PYMODULE'), + ('idna.uts46data', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\uts46data.py', + 'PYMODULE'), + ('idna.idnadata', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\idnadata.py', + 'PYMODULE'), + ('requests.hooks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\hooks.py', + 'PYMODULE'), + ('requests.cookies', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\cookies.py', + 'PYMODULE'), + ('requests.auth', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\auth.py', + 'PYMODULE'), + ('requests._internal_utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\_internal_utils.py', + 'PYMODULE'), + ('urllib3.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\__init__.py', + 'PYMODULE'), + ('urllib3.util.wait', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\wait.py', + 'PYMODULE'), + ('urllib3.util.url', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\url.py', + 'PYMODULE'), + ('urllib3.util.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\util.py', + 'PYMODULE'), + ('urllib3.util.timeout', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\timeout.py', + 'PYMODULE'), + ('urllib3.util.ssl_', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssl_.py', + 'PYMODULE'), + ('urllib3.util.ssltransport', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssltransport.py', + 'PYMODULE'), + ('typing_extensions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\typing_extensions.py', + 'PYMODULE'), + ('asyncio.coroutines', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\coroutines.py', + 'PYMODULE'), + ('asyncio', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\__init__.py', + 'PYMODULE'), + ('asyncio.unix_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\unix_events.py', + 'PYMODULE'), + ('asyncio.log', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\log.py', + 'PYMODULE'), + ('asyncio.windows_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\windows_events.py', + 'PYMODULE'), + ('asyncio.windows_utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\windows_utils.py', + 'PYMODULE'), + ('asyncio.selector_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\selector_events.py', + 'PYMODULE'), + ('asyncio.proactor_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\proactor_events.py', + 'PYMODULE'), + ('asyncio.base_subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_subprocess.py', + 'PYMODULE'), + ('asyncio.threads', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\threads.py', + 'PYMODULE'), + ('asyncio.taskgroups', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\taskgroups.py', + 'PYMODULE'), + ('asyncio.subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\subprocess.py', + 'PYMODULE'), + ('asyncio.streams', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\streams.py', + 'PYMODULE'), + ('asyncio.queues', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\queues.py', + 'PYMODULE'), + ('asyncio.runners', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\runners.py', + 'PYMODULE'), + ('asyncio.base_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_events.py', + 'PYMODULE'), + ('concurrent.futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\__init__.py', + 'PYMODULE'), + ('concurrent.futures.thread', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\thread.py', + 'PYMODULE'), + ('concurrent.futures.process', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\process.py', + 'PYMODULE'), + ('concurrent.futures._base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\_base.py', + 'PYMODULE'), + ('concurrent', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\__init__.py', + 'PYMODULE'), + ('asyncio.trsock', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\trsock.py', + 'PYMODULE'), + ('asyncio.staggered', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\staggered.py', + 'PYMODULE'), + ('asyncio.timeouts', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\timeouts.py', + 'PYMODULE'), + ('asyncio.tasks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\tasks.py', + 'PYMODULE'), + ('asyncio.base_tasks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_tasks.py', + 'PYMODULE'), + ('asyncio.locks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\locks.py', + 'PYMODULE'), + ('asyncio.mixins', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\mixins.py', + 'PYMODULE'), + ('asyncio.sslproto', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\sslproto.py', + 'PYMODULE'), + ('asyncio.transports', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\transports.py', + 'PYMODULE'), + ('asyncio.protocols', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\protocols.py', + 'PYMODULE'), + ('asyncio.futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\futures.py', + 'PYMODULE'), + ('asyncio.base_futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_futures.py', + 'PYMODULE'), + ('asyncio.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\exceptions.py', + 'PYMODULE'), + ('asyncio.events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\events.py', + 'PYMODULE'), + ('asyncio.format_helpers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\format_helpers.py', + 'PYMODULE'), + ('asyncio.constants', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\constants.py', + 'PYMODULE'), + ('urllib3.util.retry', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\retry.py', + 'PYMODULE'), + ('urllib3.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\response.py', + 'PYMODULE'), + ('urllib3.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\connection.py', + 'PYMODULE'), + ('urllib3.util.ssl_match_hostname', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssl_match_hostname.py', + 'PYMODULE'), + ('urllib3._version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_version.py', + 'PYMODULE'), + ('urllib3.http2.probe', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\probe.py', + 'PYMODULE'), + ('urllib3.http2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\__init__.py', + 'PYMODULE'), + ('urllib3.http2.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\connection.py', + 'PYMODULE'), + ('urllib3._collections', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_collections.py', + 'PYMODULE'), + ('urllib3._base_connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_base_connection.py', + 'PYMODULE'), + ('urllib3.connectionpool', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\connectionpool.py', + 'PYMODULE'), + ('urllib3.util.proxy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\proxy.py', + 'PYMODULE'), + ('urllib3._request_methods', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_request_methods.py', + 'PYMODULE'), + ('urllib3.util.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\response.py', + 'PYMODULE'), + ('urllib3.util.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\request.py', + 'PYMODULE'), + ('urllib3.util.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\connection.py', + 'PYMODULE'), + ('__future__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\__future__.py', + 'PYMODULE'), + ('urllib3.filepost', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\filepost.py', + 'PYMODULE'), + ('urllib3.fields', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\fields.py', + 'PYMODULE'), + ('requests.api', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\api.py', + 'PYMODULE'), + ('requests.sessions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\sessions.py', + 'PYMODULE'), + ('requests.adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\adapters.py', + 'PYMODULE'), + ('urllib3.contrib.socks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\socks.py', + 'PYMODULE'), + ('socks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\socks.py', + 'PYMODULE'), + ('urllib3.poolmanager', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\poolmanager.py', + 'PYMODULE'), + ('requests.__version__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\__version__.py', + 'PYMODULE'), + ('requests.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\utils.py', + 'PYMODULE'), + ('requests.certs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\certs.py', + 'PYMODULE'), + ('certifi', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\__init__.py', + 'PYMODULE'), + ('certifi.core', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\core.py', + 'PYMODULE'), + ('requests.packages', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\packages.py', + 'PYMODULE'), + ('urllib3.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\exceptions.py', + 'PYMODULE'), + ('cryptography', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl.binding', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\binding.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\__init__.py', + 'PYMODULE'), + ('cryptography.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\exceptions.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl._conditional', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\_conditional.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.backends.openssl.backend', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\openssl\\backend.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.modes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\modes.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._cipheralgorithm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_cipheralgorithm.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.algorithms', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\algorithms.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit.ciphers.algorithms', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\ciphers\\algorithms.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit.ciphers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\ciphers\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\base.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.padding', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\padding.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.rsa', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\rsa.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._serialization', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_serialization.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\utils.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ec.py', + 'PYMODULE'), + ('cryptography.hazmat._oid', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\_oid.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.dh', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\dh.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.x25519', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\x25519.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.x448', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\x448.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ed25519', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ed25519.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ed448', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ed448.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.dsa', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\dsa.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._asymmetric', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_asymmetric.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.hashes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\hashes.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization.ssh', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\ssh.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\base.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.constant_time', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\constant_time.py', + 'PYMODULE'), + ('cryptography.hazmat.backends.openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\openssl\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.backends', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\__init__.py', + 'PYMODULE'), + ('cryptography.x509', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\__init__.py', + 'PYMODULE'), + ('cryptography.x509.oid', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\oid.py', + 'PYMODULE'), + ('cryptography.x509.name', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\name.py', + 'PYMODULE'), + ('cryptography.x509.general_name', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\general_name.py', + 'PYMODULE'), + ('cryptography.x509.extensions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\extensions.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.types', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\types.py', + 'PYMODULE'), + ('cryptography.x509.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\base.py', + 'PYMODULE'), + ('cryptography.x509.verification', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\verification.py', + 'PYMODULE'), + ('cryptography.x509.certificate_transparency', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\certificate_transparency.py', + 'PYMODULE'), + ('cryptography.__about__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\__about__.py', + 'PYMODULE'), + ('cryptography.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\utils.py', + 'PYMODULE'), + ('urllib3.contrib.pyopenssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\pyopenssl.py', + 'PYMODULE'), + ('urllib3.contrib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\__init__.py', + 'PYMODULE'), + ('chardet', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\__init__.py', + 'PYMODULE'), + ('chardet.version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\version.py', + 'PYMODULE'), + ('chardet.universaldetector', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\universaldetector.py', + 'PYMODULE'), + ('chardet.utf1632prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\utf1632prober.py', + 'PYMODULE'), + ('chardet.sbcsgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sbcsgroupprober.py', + 'PYMODULE'), + ('chardet.sbcharsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sbcharsetprober.py', + 'PYMODULE'), + ('chardet.langturkishmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langturkishmodel.py', + 'PYMODULE'), + ('chardet.langthaimodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langthaimodel.py', + 'PYMODULE'), + ('chardet.langrussianmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langrussianmodel.py', + 'PYMODULE'), + ('chardet.langhebrewmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langhebrewmodel.py', + 'PYMODULE'), + ('chardet.langgreekmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langgreekmodel.py', + 'PYMODULE'), + ('chardet.langbulgarianmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langbulgarianmodel.py', + 'PYMODULE'), + ('chardet.hebrewprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\hebrewprober.py', + 'PYMODULE'), + ('chardet.mbcsgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcsgroupprober.py', + 'PYMODULE'), + ('chardet.utf8prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\utf8prober.py', + 'PYMODULE'), + ('chardet.mbcssm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcssm.py', + 'PYMODULE'), + ('chardet.codingstatemachinedict', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\codingstatemachinedict.py', + 'PYMODULE'), + ('chardet.codingstatemachine', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\codingstatemachine.py', + 'PYMODULE'), + ('chardet.sjisprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sjisprober.py', + 'PYMODULE'), + ('chardet.mbcharsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcharsetprober.py', + 'PYMODULE'), + ('chardet.jpcntx', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\jpcntx.py', + 'PYMODULE'), + ('chardet.chardistribution', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\chardistribution.py', + 'PYMODULE'), + ('chardet.johabfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\johabfreq.py', + 'PYMODULE'), + ('chardet.jisfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\jisfreq.py', + 'PYMODULE'), + ('chardet.gb2312freq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\gb2312freq.py', + 'PYMODULE'), + ('chardet.euctwfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euctwfreq.py', + 'PYMODULE'), + ('chardet.euckrfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euckrfreq.py', + 'PYMODULE'), + ('chardet.big5freq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\big5freq.py', + 'PYMODULE'), + ('chardet.johabprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\johabprober.py', + 'PYMODULE'), + ('chardet.gb2312prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\gb2312prober.py', + 'PYMODULE'), + ('chardet.euctwprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euctwprober.py', + 'PYMODULE'), + ('chardet.euckrprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euckrprober.py', + 'PYMODULE'), + ('chardet.eucjpprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\eucjpprober.py', + 'PYMODULE'), + ('chardet.cp949prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\cp949prober.py', + 'PYMODULE'), + ('chardet.big5prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\big5prober.py', + 'PYMODULE'), + ('chardet.macromanprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\macromanprober.py', + 'PYMODULE'), + ('chardet.latin1prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\latin1prober.py', + 'PYMODULE'), + ('chardet.escprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\escprober.py', + 'PYMODULE'), + ('chardet.escsm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\escsm.py', + 'PYMODULE'), + ('chardet.resultdict', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\resultdict.py', + 'PYMODULE'), + ('chardet.enums', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\enums.py', + 'PYMODULE'), + ('chardet.charsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\charsetprober.py', + 'PYMODULE'), + ('chardet.charsetgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\charsetgroupprober.py', + 'PYMODULE'), + ('charset_normalizer', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\__init__.py', + 'PYMODULE'), + ('charset_normalizer.version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\version.py', + 'PYMODULE'), + ('charset_normalizer.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\utils.py', + 'PYMODULE'), + ('charset_normalizer.constant', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\constant.py', + 'PYMODULE'), + ('charset_normalizer.models', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\models.py', + 'PYMODULE'), + ('charset_normalizer.cd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\cd.py', + 'PYMODULE'), + ('charset_normalizer.legacy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\legacy.py', + 'PYMODULE'), + ('charset_normalizer.api', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\api.py', + 'PYMODULE'), + ('requests.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\exceptions.py', + 'PYMODULE'), + ('urllib3', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\__init__.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\__init__.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\connection.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\response.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\request.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.fetch', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\fetch.py', + 'PYMODULE'), + ('wmi', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\wmi.py', + 'PYMODULE'), + ('pywintypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\pywintypes.py', + 'PYMODULE'), + ('pywin32_system32', '-', 'PYMODULE'), + ('win32com.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\__init__.py', + 'PYMODULE'), + ('winerror', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\winerror.py', + 'PYMODULE'), + ('win32com.client.makepy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\makepy.py', + 'PYMODULE'), + ('pywin.dialogs.status', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\status.py', + 'PYMODULE'), + ('pywin.mfc.thread', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\thread.py', + 'PYMODULE'), + ('pywin.mfc.object', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\object.py', + 'PYMODULE'), + ('pywin.mfc.dialog', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\dialog.py', + 'PYMODULE'), + ('pywin.mfc.window', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\window.py', + 'PYMODULE'), + ('pywin.mfc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\__init__.py', + 'PYMODULE'), + ('win32con', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\win32con.py', + 'PYMODULE'), + ('pywin.dialogs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\__init__.py', + 'PYMODULE'), + ('pywin', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\__init__.py', + 'PYMODULE'), + ('win32com.client.selecttlb', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\selecttlb.py', + 'PYMODULE'), + ('pywin.dialogs.list', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\list.py', + 'PYMODULE'), + ('commctrl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\commctrl.py', + 'PYMODULE'), + ('win32com.client.genpy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\genpy.py', + 'PYMODULE'), + ('win32com.client.gencache', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\gencache.py', + 'PYMODULE'), + ('glob', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\glob.py', + 'PYMODULE'), + ('win32com.client.CLSIDToClass', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\CLSIDToClass.py', + 'PYMODULE'), + ('win32com.client.dynamic', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\dynamic.py', + 'PYMODULE'), + ('win32com.client.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\util.py', + 'PYMODULE'), + ('win32com.client.build', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\build.py', + 'PYMODULE'), + ('win32com', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\__init__.py', + 'PYMODULE'), + ('win32com.server.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\util.py', + 'PYMODULE'), + ('win32com.server.dispatcher', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\dispatcher.py', + 'PYMODULE'), + ('win32traceutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\win32traceutil.py', + 'PYMODULE'), + ('win32com.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\util.py', + 'PYMODULE'), + ('win32com.server.exception', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\exception.py', + 'PYMODULE'), + ('win32com.server.policy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\policy.py', + 'PYMODULE'), + ('win32com.server', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\__init__.py', + 'PYMODULE'), + ('win32com.universal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\universal.py', + 'PYMODULE'), + ('pythoncom', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pythoncom.py', + 'PYMODULE')], + [('python312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python312.dll', + 'BINARY'), + ('pywin32_system32\\pywintypes312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pywintypes312.dll', + 'BINARY'), + ('pywin32_system32\\pythoncom312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pythoncom312.dll', + 'BINARY'), + ('select.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\select.pyd', + 'EXTENSION'), + ('_multiprocessing.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_multiprocessing.pyd', + 'EXTENSION'), + ('pyexpat.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\pyexpat.pyd', + 'EXTENSION'), + ('_ssl.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ssl.pyd', + 'EXTENSION'), + ('_hashlib.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_hashlib.pyd', + 'EXTENSION'), + ('unicodedata.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\unicodedata.pyd', + 'EXTENSION'), + ('_decimal.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_decimal.pyd', + 'EXTENSION'), + ('_lzma.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_lzma.pyd', + 'EXTENSION'), + ('_bz2.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_bz2.pyd', + 'EXTENSION'), + ('_ctypes.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ctypes.pyd', + 'EXTENSION'), + ('_queue.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_queue.pyd', + 'EXTENSION'), + ('_wmi.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_wmi.pyd', + 'EXTENSION'), + ('_socket.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_socket.pyd', + 'EXTENSION'), + ('_overlapped.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_overlapped.pyd', + 'EXTENSION'), + ('_asyncio.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_asyncio.pyd', + 'EXTENSION'), + ('_cffi_backend.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_cffi_backend.cp312-win_amd64.pyd', + 'EXTENSION'), + ('cryptography\\hazmat\\bindings\\_rust.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\_rust.pyd', + 'EXTENSION'), + ('charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'EXTENSION'), + ('charset_normalizer\\md.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md.cp312-win_amd64.pyd', + 'EXTENSION'), + ('win32\\_win32sysloader.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\_win32sysloader.pyd', + 'EXTENSION'), + ('win32\\win32api.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32api.pyd', + 'EXTENSION'), + ('Pythonwin\\win32ui.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\win32ui.pyd', + 'EXTENSION'), + ('win32\\win32event.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32event.pyd', + 'EXTENSION'), + ('win32\\win32trace.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32trace.pyd', + 'EXTENSION'), + ('VCRUNTIME140.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140.dll', + 'BINARY'), + ('VCRUNTIME140_1.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140_1.dll', + 'BINARY'), + ('libssl-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libssl-3.dll', + 'BINARY'), + ('libcrypto-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libcrypto-3.dll', + 'BINARY'), + ('libffi-8.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libffi-8.dll', + 'BINARY'), + ('python3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python3.dll', + 'BINARY'), + ('Pythonwin\\mfc140u.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\mfc140u.dll', + 'BINARY')], + [], + [], + [('certifi\\cacert.pem', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\cacert.pem', + 'DATA'), + ('certifi\\py.typed', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\py.typed', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'DATA'), + ('cryptography-45.0.2.dist-info\\RECORD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\RECORD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\METADATA', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\METADATA', + 'DATA'), + ('cryptography-45.0.2.dist-info\\WHEEL', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\WHEEL', + 'DATA'), + ('cryptography-45.0.2.dist-info\\INSTALLER', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\INSTALLER', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'DATA'), + ('base_library.zip', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\base_library.zip', + 'DATA')], + [('posixpath', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\posixpath.py', + 'PYMODULE'), + ('functools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\functools.py', + 'PYMODULE'), + ('warnings', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\warnings.py', + 'PYMODULE'), + ('io', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\io.py', + 'PYMODULE'), + ('stat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\stat.py', + 'PYMODULE'), + ('os', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\os.py', + 'PYMODULE'), + ('sre_constants', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\sre_constants.py', + 'PYMODULE'), + ('codecs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\codecs.py', + 'PYMODULE'), + ('_collections_abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_collections_abc.py', + 'PYMODULE'), + ('heapq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\heapq.py', + 'PYMODULE'), + ('ntpath', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ntpath.py', + 'PYMODULE'), + ('linecache', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\linecache.py', + 'PYMODULE'), + ('_weakrefset', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_weakrefset.py', + 'PYMODULE'), + ('sre_parse', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\sre_parse.py', + 'PYMODULE'), + ('re._parser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\re\\_parser.py', + 'PYMODULE'), + ('re._constants', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\re\\_constants.py', + 'PYMODULE'), + ('re._compiler', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\re\\_compiler.py', + 'PYMODULE'), + ('re._casefix', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\re\\_casefix.py', + 'PYMODULE'), + ('re', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\re\\__init__.py', + 'PYMODULE'), + ('traceback', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\traceback.py', + 'PYMODULE'), + ('weakref', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\weakref.py', + 'PYMODULE'), + ('keyword', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\keyword.py', + 'PYMODULE'), + ('copyreg', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\copyreg.py', + 'PYMODULE'), + ('reprlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\reprlib.py', + 'PYMODULE'), + ('enum', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\enum.py', + 'PYMODULE'), + ('encodings.zlib_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\zlib_codec.py', + 'PYMODULE'), + ('encodings.uu_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\uu_codec.py', + 'PYMODULE'), + ('encodings.utf_8_sig', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_8_sig.py', + 'PYMODULE'), + ('encodings.utf_8', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_8.py', + 'PYMODULE'), + ('encodings.utf_7', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_7.py', + 'PYMODULE'), + ('encodings.utf_32_le', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_32_le.py', + 'PYMODULE'), + ('encodings.utf_32_be', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_32_be.py', + 'PYMODULE'), + ('encodings.utf_32', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_32.py', + 'PYMODULE'), + ('encodings.utf_16_le', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_16_le.py', + 'PYMODULE'), + ('encodings.utf_16_be', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_16_be.py', + 'PYMODULE'), + ('encodings.utf_16', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\utf_16.py', + 'PYMODULE'), + ('encodings.unicode_escape', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\unicode_escape.py', + 'PYMODULE'), + ('encodings.undefined', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\undefined.py', + 'PYMODULE'), + ('encodings.tis_620', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\tis_620.py', + 'PYMODULE'), + ('encodings.shift_jisx0213', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\shift_jisx0213.py', + 'PYMODULE'), + ('encodings.shift_jis_2004', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\shift_jis_2004.py', + 'PYMODULE'), + ('encodings.shift_jis', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\shift_jis.py', + 'PYMODULE'), + ('encodings.rot_13', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\rot_13.py', + 'PYMODULE'), + ('encodings.raw_unicode_escape', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\raw_unicode_escape.py', + 'PYMODULE'), + ('encodings.quopri_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\quopri_codec.py', + 'PYMODULE'), + ('encodings.punycode', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\punycode.py', + 'PYMODULE'), + ('encodings.ptcp154', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\ptcp154.py', + 'PYMODULE'), + ('encodings.palmos', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\palmos.py', + 'PYMODULE'), + ('encodings.oem', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\oem.py', + 'PYMODULE'), + ('encodings.mbcs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mbcs.py', + 'PYMODULE'), + ('encodings.mac_turkish', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_turkish.py', + 'PYMODULE'), + ('encodings.mac_romanian', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_romanian.py', + 'PYMODULE'), + ('encodings.mac_roman', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_roman.py', + 'PYMODULE'), + ('encodings.mac_latin2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_latin2.py', + 'PYMODULE'), + ('encodings.mac_iceland', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_iceland.py', + 'PYMODULE'), + ('encodings.mac_greek', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_greek.py', + 'PYMODULE'), + ('encodings.mac_farsi', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_farsi.py', + 'PYMODULE'), + ('encodings.mac_cyrillic', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_cyrillic.py', + 'PYMODULE'), + ('encodings.mac_croatian', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_croatian.py', + 'PYMODULE'), + ('encodings.mac_arabic', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\mac_arabic.py', + 'PYMODULE'), + ('encodings.latin_1', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\latin_1.py', + 'PYMODULE'), + ('encodings.kz1048', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\kz1048.py', + 'PYMODULE'), + ('encodings.koi8_u', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\koi8_u.py', + 'PYMODULE'), + ('encodings.koi8_t', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\koi8_t.py', + 'PYMODULE'), + ('encodings.koi8_r', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\koi8_r.py', + 'PYMODULE'), + ('encodings.johab', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\johab.py', + 'PYMODULE'), + ('encodings.iso8859_9', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_9.py', + 'PYMODULE'), + ('encodings.iso8859_8', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_8.py', + 'PYMODULE'), + ('encodings.iso8859_7', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_7.py', + 'PYMODULE'), + ('encodings.iso8859_6', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_6.py', + 'PYMODULE'), + ('encodings.iso8859_5', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_5.py', + 'PYMODULE'), + ('encodings.iso8859_4', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_4.py', + 'PYMODULE'), + ('encodings.iso8859_3', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_3.py', + 'PYMODULE'), + ('encodings.iso8859_2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_2.py', + 'PYMODULE'), + ('encodings.iso8859_16', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_16.py', + 'PYMODULE'), + ('encodings.iso8859_15', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_15.py', + 'PYMODULE'), + ('encodings.iso8859_14', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_14.py', + 'PYMODULE'), + ('encodings.iso8859_13', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_13.py', + 'PYMODULE'), + ('encodings.iso8859_11', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_11.py', + 'PYMODULE'), + ('encodings.iso8859_10', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_10.py', + 'PYMODULE'), + ('encodings.iso8859_1', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso8859_1.py', + 'PYMODULE'), + ('encodings.iso2022_kr', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_kr.py', + 'PYMODULE'), + ('encodings.iso2022_jp_ext', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp_ext.py', + 'PYMODULE'), + ('encodings.iso2022_jp_3', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp_3.py', + 'PYMODULE'), + ('encodings.iso2022_jp_2004', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp_2004.py', + 'PYMODULE'), + ('encodings.iso2022_jp_2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp_2.py', + 'PYMODULE'), + ('encodings.iso2022_jp_1', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp_1.py', + 'PYMODULE'), + ('encodings.iso2022_jp', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\iso2022_jp.py', + 'PYMODULE'), + ('encodings.idna', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\idna.py', + 'PYMODULE'), + ('encodings.hz', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\hz.py', + 'PYMODULE'), + ('encodings.hp_roman8', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\hp_roman8.py', + 'PYMODULE'), + ('encodings.hex_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\hex_codec.py', + 'PYMODULE'), + ('encodings.gbk', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\gbk.py', + 'PYMODULE'), + ('encodings.gb2312', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\gb2312.py', + 'PYMODULE'), + ('encodings.gb18030', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\gb18030.py', + 'PYMODULE'), + ('encodings.euc_kr', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\euc_kr.py', + 'PYMODULE'), + ('encodings.euc_jp', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\euc_jp.py', + 'PYMODULE'), + ('encodings.euc_jisx0213', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\euc_jisx0213.py', + 'PYMODULE'), + ('encodings.euc_jis_2004', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\euc_jis_2004.py', + 'PYMODULE'), + ('encodings.cp950', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp950.py', + 'PYMODULE'), + ('encodings.cp949', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp949.py', + 'PYMODULE'), + ('encodings.cp932', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp932.py', + 'PYMODULE'), + ('encodings.cp875', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp875.py', + 'PYMODULE'), + ('encodings.cp874', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp874.py', + 'PYMODULE'), + ('encodings.cp869', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp869.py', + 'PYMODULE'), + ('encodings.cp866', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp866.py', + 'PYMODULE'), + ('encodings.cp865', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp865.py', + 'PYMODULE'), + ('encodings.cp864', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp864.py', + 'PYMODULE'), + ('encodings.cp863', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp863.py', + 'PYMODULE'), + ('encodings.cp862', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp862.py', + 'PYMODULE'), + ('encodings.cp861', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp861.py', + 'PYMODULE'), + ('encodings.cp860', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp860.py', + 'PYMODULE'), + ('encodings.cp858', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp858.py', + 'PYMODULE'), + ('encodings.cp857', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp857.py', + 'PYMODULE'), + ('encodings.cp856', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp856.py', + 'PYMODULE'), + ('encodings.cp855', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp855.py', + 'PYMODULE'), + ('encodings.cp852', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp852.py', + 'PYMODULE'), + ('encodings.cp850', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp850.py', + 'PYMODULE'), + ('encodings.cp775', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp775.py', + 'PYMODULE'), + ('encodings.cp737', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp737.py', + 'PYMODULE'), + ('encodings.cp720', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp720.py', + 'PYMODULE'), + ('encodings.cp500', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp500.py', + 'PYMODULE'), + ('encodings.cp437', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp437.py', + 'PYMODULE'), + ('encodings.cp424', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp424.py', + 'PYMODULE'), + ('encodings.cp273', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp273.py', + 'PYMODULE'), + ('encodings.cp1258', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1258.py', + 'PYMODULE'), + ('encodings.cp1257', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1257.py', + 'PYMODULE'), + ('encodings.cp1256', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1256.py', + 'PYMODULE'), + ('encodings.cp1255', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1255.py', + 'PYMODULE'), + ('encodings.cp1254', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1254.py', + 'PYMODULE'), + ('encodings.cp1253', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1253.py', + 'PYMODULE'), + ('encodings.cp1252', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1252.py', + 'PYMODULE'), + ('encodings.cp1251', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1251.py', + 'PYMODULE'), + ('encodings.cp1250', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1250.py', + 'PYMODULE'), + ('encodings.cp1140', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1140.py', + 'PYMODULE'), + ('encodings.cp1125', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1125.py', + 'PYMODULE'), + ('encodings.cp1026', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1026.py', + 'PYMODULE'), + ('encodings.cp1006', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp1006.py', + 'PYMODULE'), + ('encodings.cp037', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\cp037.py', + 'PYMODULE'), + ('encodings.charmap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\charmap.py', + 'PYMODULE'), + ('encodings.bz2_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\bz2_codec.py', + 'PYMODULE'), + ('encodings.big5hkscs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\big5hkscs.py', + 'PYMODULE'), + ('encodings.big5', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\big5.py', + 'PYMODULE'), + ('encodings.base64_codec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\base64_codec.py', + 'PYMODULE'), + ('encodings.ascii', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\ascii.py', + 'PYMODULE'), + ('encodings.aliases', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\aliases.py', + 'PYMODULE'), + ('encodings', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\encodings\\__init__.py', + 'PYMODULE'), + ('operator', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\operator.py', + 'PYMODULE'), + ('genericpath', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\genericpath.py', + 'PYMODULE'), + ('types', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\types.py', + 'PYMODULE'), + ('abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\abc.py', + 'PYMODULE'), + ('collections.abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\collections\\abc.py', + 'PYMODULE'), + ('collections', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\collections\\__init__.py', + 'PYMODULE'), + ('sre_compile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\sre_compile.py', + 'PYMODULE'), + ('locale', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\locale.py', + 'PYMODULE')]) diff --git a/build/pc_agent/EXE-00.toc b/build/pc_agent/EXE-00.toc new file mode 100644 index 0000000..2574201 --- /dev/null +++ b/build/pc_agent/EXE-00.toc @@ -0,0 +1,211 @@ +('D:\\이태훈\\22전산자산조사\\ITAM\\dist\\pc_agent.exe', + True, + False, + False, + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\bootloader\\images\\icon-console.ico', + None, + False, + False, + b'\n\n \n \n \n \n \n \n \n ' + b'\n <' + b'application>\n \n \n ' + b' \n \n \n \n <' + b'/compatibility>\n ' + b'\n \n true\n \n \n \n \n \n \n \n', + True, + False, + None, + None, + None, + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\pc_agent.pkg', + [('pyi-contents-directory _internal', '', 'OPTION'), + ('PYZ-00.pyz', 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\PYZ-00.pyz', 'PYZ'), + ('struct', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\struct.pyc', + 'PYMODULE'), + ('pyimod01_archive', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod01_archive.pyc', + 'PYMODULE'), + ('pyimod02_importers', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod02_importers.pyc', + 'PYMODULE'), + ('pyimod03_ctypes', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod03_ctypes.pyc', + 'PYMODULE'), + ('pyimod04_pywin32', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod04_pywin32.pyc', + 'PYMODULE'), + ('pyiboot01_bootstrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py', + 'PYSOURCE'), + ('pyi_rth_inspect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py', + 'PYSOURCE'), + ('pyi_rth_pkgutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py', + 'PYSOURCE'), + ('pyi_rth_multiprocessing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py', + 'PYSOURCE'), + ('pyi_rth_cryptography_openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_cryptography_openssl.py', + 'PYSOURCE'), + ('pyi_rth_pywintypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pywintypes.py', + 'PYSOURCE'), + ('pyi_rth_pythoncom', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pythoncom.py', + 'PYSOURCE'), + ('pc_agent', 'D:\\이태훈\\22전산자산조사\\ITAM\\pc_agent.py', 'PYSOURCE'), + ('python312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python312.dll', + 'BINARY'), + ('pywin32_system32\\pywintypes312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pywintypes312.dll', + 'BINARY'), + ('pywin32_system32\\pythoncom312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pythoncom312.dll', + 'BINARY'), + ('select.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\select.pyd', + 'EXTENSION'), + ('_multiprocessing.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_multiprocessing.pyd', + 'EXTENSION'), + ('pyexpat.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\pyexpat.pyd', + 'EXTENSION'), + ('_ssl.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ssl.pyd', + 'EXTENSION'), + ('_hashlib.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_hashlib.pyd', + 'EXTENSION'), + ('unicodedata.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\unicodedata.pyd', + 'EXTENSION'), + ('_decimal.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_decimal.pyd', + 'EXTENSION'), + ('_lzma.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_lzma.pyd', + 'EXTENSION'), + ('_bz2.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_bz2.pyd', + 'EXTENSION'), + ('_ctypes.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ctypes.pyd', + 'EXTENSION'), + ('_queue.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_queue.pyd', + 'EXTENSION'), + ('_wmi.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_wmi.pyd', + 'EXTENSION'), + ('_socket.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_socket.pyd', + 'EXTENSION'), + ('_overlapped.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_overlapped.pyd', + 'EXTENSION'), + ('_asyncio.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_asyncio.pyd', + 'EXTENSION'), + ('_cffi_backend.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_cffi_backend.cp312-win_amd64.pyd', + 'EXTENSION'), + ('cryptography\\hazmat\\bindings\\_rust.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\_rust.pyd', + 'EXTENSION'), + ('charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'EXTENSION'), + ('charset_normalizer\\md.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md.cp312-win_amd64.pyd', + 'EXTENSION'), + ('win32\\_win32sysloader.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\_win32sysloader.pyd', + 'EXTENSION'), + ('win32\\win32api.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32api.pyd', + 'EXTENSION'), + ('Pythonwin\\win32ui.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\win32ui.pyd', + 'EXTENSION'), + ('win32\\win32event.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32event.pyd', + 'EXTENSION'), + ('win32\\win32trace.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32trace.pyd', + 'EXTENSION'), + ('VCRUNTIME140.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140.dll', + 'BINARY'), + ('VCRUNTIME140_1.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140_1.dll', + 'BINARY'), + ('libssl-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libssl-3.dll', + 'BINARY'), + ('libcrypto-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libcrypto-3.dll', + 'BINARY'), + ('libffi-8.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libffi-8.dll', + 'BINARY'), + ('python3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python3.dll', + 'BINARY'), + ('Pythonwin\\mfc140u.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\mfc140u.dll', + 'BINARY'), + ('certifi\\cacert.pem', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\cacert.pem', + 'DATA'), + ('certifi\\py.typed', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\py.typed', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'DATA'), + ('cryptography-45.0.2.dist-info\\RECORD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\RECORD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\METADATA', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\METADATA', + 'DATA'), + ('cryptography-45.0.2.dist-info\\WHEEL', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\WHEEL', + 'DATA'), + ('cryptography-45.0.2.dist-info\\INSTALLER', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\INSTALLER', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'DATA'), + ('base_library.zip', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\base_library.zip', + 'DATA')], + [], + False, + False, + 1779102721, + [('run.exe', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\bootloader\\Windows-64bit-intel\\run.exe', + 'EXECUTABLE')], + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python312.dll') diff --git a/build/pc_agent/PKG-00.toc b/build/pc_agent/PKG-00.toc new file mode 100644 index 0000000..1cac0c0 --- /dev/null +++ b/build/pc_agent/PKG-00.toc @@ -0,0 +1,189 @@ +('D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\pc_agent.pkg', + {'BINARY': True, + 'DATA': True, + 'EXECUTABLE': True, + 'EXTENSION': True, + 'PYMODULE': True, + 'PYSOURCE': True, + 'PYZ': False, + 'SPLASH': True, + 'SYMLINK': False}, + [('pyi-contents-directory _internal', '', 'OPTION'), + ('PYZ-00.pyz', 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\PYZ-00.pyz', 'PYZ'), + ('struct', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\struct.pyc', + 'PYMODULE'), + ('pyimod01_archive', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod01_archive.pyc', + 'PYMODULE'), + ('pyimod02_importers', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod02_importers.pyc', + 'PYMODULE'), + ('pyimod03_ctypes', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod03_ctypes.pyc', + 'PYMODULE'), + ('pyimod04_pywin32', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\localpycs\\pyimod04_pywin32.pyc', + 'PYMODULE'), + ('pyiboot01_bootstrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py', + 'PYSOURCE'), + ('pyi_rth_inspect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_inspect.py', + 'PYSOURCE'), + ('pyi_rth_pkgutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_pkgutil.py', + 'PYSOURCE'), + ('pyi_rth_multiprocessing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\PyInstaller\\hooks\\rthooks\\pyi_rth_multiprocessing.py', + 'PYSOURCE'), + ('pyi_rth_cryptography_openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_cryptography_openssl.py', + 'PYSOURCE'), + ('pyi_rth_pywintypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pywintypes.py', + 'PYSOURCE'), + ('pyi_rth_pythoncom', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_pyinstaller_hooks_contrib\\rthooks\\pyi_rth_pythoncom.py', + 'PYSOURCE'), + ('pc_agent', 'D:\\이태훈\\22전산자산조사\\ITAM\\pc_agent.py', 'PYSOURCE'), + ('python312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python312.dll', + 'BINARY'), + ('pywin32_system32\\pywintypes312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pywintypes312.dll', + 'BINARY'), + ('pywin32_system32\\pythoncom312.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pywin32_system32\\pythoncom312.dll', + 'BINARY'), + ('select.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\select.pyd', + 'EXTENSION'), + ('_multiprocessing.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_multiprocessing.pyd', + 'EXTENSION'), + ('pyexpat.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\pyexpat.pyd', + 'EXTENSION'), + ('_ssl.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ssl.pyd', + 'EXTENSION'), + ('_hashlib.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_hashlib.pyd', + 'EXTENSION'), + ('unicodedata.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\unicodedata.pyd', + 'EXTENSION'), + ('_decimal.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_decimal.pyd', + 'EXTENSION'), + ('_lzma.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_lzma.pyd', + 'EXTENSION'), + ('_bz2.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_bz2.pyd', + 'EXTENSION'), + ('_ctypes.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_ctypes.pyd', + 'EXTENSION'), + ('_queue.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_queue.pyd', + 'EXTENSION'), + ('_wmi.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_wmi.pyd', + 'EXTENSION'), + ('_socket.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_socket.pyd', + 'EXTENSION'), + ('_overlapped.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_overlapped.pyd', + 'EXTENSION'), + ('_asyncio.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\_asyncio.pyd', + 'EXTENSION'), + ('_cffi_backend.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\_cffi_backend.cp312-win_amd64.pyd', + 'EXTENSION'), + ('cryptography\\hazmat\\bindings\\_rust.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\_rust.pyd', + 'EXTENSION'), + ('charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md__mypyc.cp312-win_amd64.pyd', + 'EXTENSION'), + ('charset_normalizer\\md.cp312-win_amd64.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\md.cp312-win_amd64.pyd', + 'EXTENSION'), + ('win32\\_win32sysloader.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\_win32sysloader.pyd', + 'EXTENSION'), + ('win32\\win32api.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32api.pyd', + 'EXTENSION'), + ('Pythonwin\\win32ui.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\win32ui.pyd', + 'EXTENSION'), + ('win32\\win32event.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32event.pyd', + 'EXTENSION'), + ('win32\\win32trace.pyd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\win32trace.pyd', + 'EXTENSION'), + ('VCRUNTIME140.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140.dll', + 'BINARY'), + ('VCRUNTIME140_1.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\VCRUNTIME140_1.dll', + 'BINARY'), + ('libssl-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libssl-3.dll', + 'BINARY'), + ('libcrypto-3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libcrypto-3.dll', + 'BINARY'), + ('libffi-8.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\DLLs\\libffi-8.dll', + 'BINARY'), + ('python3.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\python3.dll', + 'BINARY'), + ('Pythonwin\\mfc140u.dll', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\mfc140u.dll', + 'BINARY'), + ('certifi\\cacert.pem', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\cacert.pem', + 'DATA'), + ('certifi\\py.typed', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\py.typed', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.BSD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE', + 'DATA'), + ('cryptography-45.0.2.dist-info\\RECORD', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\RECORD', + 'DATA'), + ('cryptography-45.0.2.dist-info\\METADATA', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\METADATA', + 'DATA'), + ('cryptography-45.0.2.dist-info\\WHEEL', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\WHEEL', + 'DATA'), + ('cryptography-45.0.2.dist-info\\INSTALLER', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\INSTALLER', + 'DATA'), + ('cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography-45.0.2.dist-info\\licenses\\LICENSE.APACHE', + 'DATA'), + ('base_library.zip', + 'D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\base_library.zip', + 'DATA')], + 'python312.dll', + False, + False, + False, + [], + None, + None, + None) diff --git a/build/pc_agent/PYZ-00.pyz b/build/pc_agent/PYZ-00.pyz new file mode 100644 index 0000000..60a6d78 Binary files /dev/null and b/build/pc_agent/PYZ-00.pyz differ diff --git a/build/pc_agent/PYZ-00.toc b/build/pc_agent/PYZ-00.toc new file mode 100644 index 0000000..2d73843 --- /dev/null +++ b/build/pc_agent/PYZ-00.toc @@ -0,0 +1,1193 @@ +('D:\\이태훈\\22전산자산조사\\ITAM\\build\\pc_agent\\PYZ-00.pyz', + [('__future__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\__future__.py', + 'PYMODULE'), + ('_compat_pickle', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_compat_pickle.py', + 'PYMODULE'), + ('_compression', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_compression.py', + 'PYMODULE'), + ('_py_abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_py_abc.py', + 'PYMODULE'), + ('_pydatetime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_pydatetime.py', + 'PYMODULE'), + ('_pydecimal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_pydecimal.py', + 'PYMODULE'), + ('_strptime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_strptime.py', + 'PYMODULE'), + ('_threading_local', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\_threading_local.py', + 'PYMODULE'), + ('argparse', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\argparse.py', + 'PYMODULE'), + ('ast', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ast.py', + 'PYMODULE'), + ('asyncio', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\__init__.py', + 'PYMODULE'), + ('asyncio.base_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_events.py', + 'PYMODULE'), + ('asyncio.base_futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_futures.py', + 'PYMODULE'), + ('asyncio.base_subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_subprocess.py', + 'PYMODULE'), + ('asyncio.base_tasks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\base_tasks.py', + 'PYMODULE'), + ('asyncio.constants', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\constants.py', + 'PYMODULE'), + ('asyncio.coroutines', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\coroutines.py', + 'PYMODULE'), + ('asyncio.events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\events.py', + 'PYMODULE'), + ('asyncio.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\exceptions.py', + 'PYMODULE'), + ('asyncio.format_helpers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\format_helpers.py', + 'PYMODULE'), + ('asyncio.futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\futures.py', + 'PYMODULE'), + ('asyncio.locks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\locks.py', + 'PYMODULE'), + ('asyncio.log', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\log.py', + 'PYMODULE'), + ('asyncio.mixins', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\mixins.py', + 'PYMODULE'), + ('asyncio.proactor_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\proactor_events.py', + 'PYMODULE'), + ('asyncio.protocols', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\protocols.py', + 'PYMODULE'), + ('asyncio.queues', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\queues.py', + 'PYMODULE'), + ('asyncio.runners', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\runners.py', + 'PYMODULE'), + ('asyncio.selector_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\selector_events.py', + 'PYMODULE'), + ('asyncio.sslproto', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\sslproto.py', + 'PYMODULE'), + ('asyncio.staggered', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\staggered.py', + 'PYMODULE'), + ('asyncio.streams', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\streams.py', + 'PYMODULE'), + ('asyncio.subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\subprocess.py', + 'PYMODULE'), + ('asyncio.taskgroups', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\taskgroups.py', + 'PYMODULE'), + ('asyncio.tasks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\tasks.py', + 'PYMODULE'), + ('asyncio.threads', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\threads.py', + 'PYMODULE'), + ('asyncio.timeouts', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\timeouts.py', + 'PYMODULE'), + ('asyncio.transports', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\transports.py', + 'PYMODULE'), + ('asyncio.trsock', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\trsock.py', + 'PYMODULE'), + ('asyncio.unix_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\unix_events.py', + 'PYMODULE'), + ('asyncio.windows_events', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\windows_events.py', + 'PYMODULE'), + ('asyncio.windows_utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\asyncio\\windows_utils.py', + 'PYMODULE'), + ('base64', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\base64.py', + 'PYMODULE'), + ('bisect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\bisect.py', + 'PYMODULE'), + ('bz2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\bz2.py', + 'PYMODULE'), + ('calendar', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\calendar.py', + 'PYMODULE'), + ('certifi', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\__init__.py', + 'PYMODULE'), + ('certifi.core', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\certifi\\core.py', + 'PYMODULE'), + ('chardet', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\__init__.py', + 'PYMODULE'), + ('chardet.big5freq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\big5freq.py', + 'PYMODULE'), + ('chardet.big5prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\big5prober.py', + 'PYMODULE'), + ('chardet.chardistribution', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\chardistribution.py', + 'PYMODULE'), + ('chardet.charsetgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\charsetgroupprober.py', + 'PYMODULE'), + ('chardet.charsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\charsetprober.py', + 'PYMODULE'), + ('chardet.codingstatemachine', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\codingstatemachine.py', + 'PYMODULE'), + ('chardet.codingstatemachinedict', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\codingstatemachinedict.py', + 'PYMODULE'), + ('chardet.cp949prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\cp949prober.py', + 'PYMODULE'), + ('chardet.enums', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\enums.py', + 'PYMODULE'), + ('chardet.escprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\escprober.py', + 'PYMODULE'), + ('chardet.escsm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\escsm.py', + 'PYMODULE'), + ('chardet.eucjpprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\eucjpprober.py', + 'PYMODULE'), + ('chardet.euckrfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euckrfreq.py', + 'PYMODULE'), + ('chardet.euckrprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euckrprober.py', + 'PYMODULE'), + ('chardet.euctwfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euctwfreq.py', + 'PYMODULE'), + ('chardet.euctwprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\euctwprober.py', + 'PYMODULE'), + ('chardet.gb2312freq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\gb2312freq.py', + 'PYMODULE'), + ('chardet.gb2312prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\gb2312prober.py', + 'PYMODULE'), + ('chardet.hebrewprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\hebrewprober.py', + 'PYMODULE'), + ('chardet.jisfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\jisfreq.py', + 'PYMODULE'), + ('chardet.johabfreq', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\johabfreq.py', + 'PYMODULE'), + ('chardet.johabprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\johabprober.py', + 'PYMODULE'), + ('chardet.jpcntx', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\jpcntx.py', + 'PYMODULE'), + ('chardet.langbulgarianmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langbulgarianmodel.py', + 'PYMODULE'), + ('chardet.langgreekmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langgreekmodel.py', + 'PYMODULE'), + ('chardet.langhebrewmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langhebrewmodel.py', + 'PYMODULE'), + ('chardet.langrussianmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langrussianmodel.py', + 'PYMODULE'), + ('chardet.langthaimodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langthaimodel.py', + 'PYMODULE'), + ('chardet.langturkishmodel', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\langturkishmodel.py', + 'PYMODULE'), + ('chardet.latin1prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\latin1prober.py', + 'PYMODULE'), + ('chardet.macromanprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\macromanprober.py', + 'PYMODULE'), + ('chardet.mbcharsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcharsetprober.py', + 'PYMODULE'), + ('chardet.mbcsgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcsgroupprober.py', + 'PYMODULE'), + ('chardet.mbcssm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\mbcssm.py', + 'PYMODULE'), + ('chardet.resultdict', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\resultdict.py', + 'PYMODULE'), + ('chardet.sbcharsetprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sbcharsetprober.py', + 'PYMODULE'), + ('chardet.sbcsgroupprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sbcsgroupprober.py', + 'PYMODULE'), + ('chardet.sjisprober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\sjisprober.py', + 'PYMODULE'), + ('chardet.universaldetector', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\universaldetector.py', + 'PYMODULE'), + ('chardet.utf1632prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\utf1632prober.py', + 'PYMODULE'), + ('chardet.utf8prober', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\utf8prober.py', + 'PYMODULE'), + ('chardet.version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\chardet\\version.py', + 'PYMODULE'), + ('charset_normalizer', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\__init__.py', + 'PYMODULE'), + ('charset_normalizer.api', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\api.py', + 'PYMODULE'), + ('charset_normalizer.cd', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\cd.py', + 'PYMODULE'), + ('charset_normalizer.constant', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\constant.py', + 'PYMODULE'), + ('charset_normalizer.legacy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\legacy.py', + 'PYMODULE'), + ('charset_normalizer.models', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\models.py', + 'PYMODULE'), + ('charset_normalizer.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\utils.py', + 'PYMODULE'), + ('charset_normalizer.version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\charset_normalizer\\version.py', + 'PYMODULE'), + ('commctrl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\commctrl.py', + 'PYMODULE'), + ('concurrent', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\__init__.py', + 'PYMODULE'), + ('concurrent.futures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\__init__.py', + 'PYMODULE'), + ('concurrent.futures._base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\_base.py', + 'PYMODULE'), + ('concurrent.futures.process', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\process.py', + 'PYMODULE'), + ('concurrent.futures.thread', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\concurrent\\futures\\thread.py', + 'PYMODULE'), + ('contextlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\contextlib.py', + 'PYMODULE'), + ('contextvars', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\contextvars.py', + 'PYMODULE'), + ('copy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\copy.py', + 'PYMODULE'), + ('cryptography', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\__init__.py', + 'PYMODULE'), + ('cryptography.__about__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\__about__.py', + 'PYMODULE'), + ('cryptography.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\exceptions.py', + 'PYMODULE'), + ('cryptography.hazmat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat._oid', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\_oid.py', + 'PYMODULE'), + ('cryptography.hazmat.backends', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.backends.openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\openssl\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.backends.openssl.backend', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\backends\\openssl\\backend.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl._conditional', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\_conditional.py', + 'PYMODULE'), + ('cryptography.hazmat.bindings.openssl.binding', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\bindings\\openssl\\binding.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit.ciphers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\ciphers\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.decrepit.ciphers.algorithms', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\decrepit\\ciphers\\algorithms.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._asymmetric', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_asymmetric.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._cipheralgorithm', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_cipheralgorithm.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives._serialization', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\_serialization.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.dh', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\dh.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.dsa', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\dsa.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ec', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ec.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ed25519', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ed25519.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.ed448', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\ed448.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.padding', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\padding.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.rsa', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\rsa.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.types', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\types.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\utils.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.x25519', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\x25519.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.asymmetric.x448', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\asymmetric\\x448.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.algorithms', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\algorithms.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\base.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.ciphers.modes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\ciphers\\modes.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.constant_time', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\constant_time.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.hashes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\hashes.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\__init__.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\base.py', + 'PYMODULE'), + ('cryptography.hazmat.primitives.serialization.ssh', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\hazmat\\primitives\\serialization\\ssh.py', + 'PYMODULE'), + ('cryptography.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\utils.py', + 'PYMODULE'), + ('cryptography.x509', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\__init__.py', + 'PYMODULE'), + ('cryptography.x509.base', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\base.py', + 'PYMODULE'), + ('cryptography.x509.certificate_transparency', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\certificate_transparency.py', + 'PYMODULE'), + ('cryptography.x509.extensions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\extensions.py', + 'PYMODULE'), + ('cryptography.x509.general_name', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\general_name.py', + 'PYMODULE'), + ('cryptography.x509.name', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\name.py', + 'PYMODULE'), + ('cryptography.x509.oid', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\oid.py', + 'PYMODULE'), + ('cryptography.x509.verification', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\cryptography\\x509\\verification.py', + 'PYMODULE'), + ('csv', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\csv.py', + 'PYMODULE'), + ('ctypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ctypes\\__init__.py', + 'PYMODULE'), + ('ctypes._endian', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ctypes\\_endian.py', + 'PYMODULE'), + ('dataclasses', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\dataclasses.py', + 'PYMODULE'), + ('datetime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\datetime.py', + 'PYMODULE'), + ('decimal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\decimal.py', + 'PYMODULE'), + ('dis', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\dis.py', + 'PYMODULE'), + ('email', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\__init__.py', + 'PYMODULE'), + ('email._encoded_words', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_encoded_words.py', + 'PYMODULE'), + ('email._header_value_parser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_header_value_parser.py', + 'PYMODULE'), + ('email._parseaddr', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_parseaddr.py', + 'PYMODULE'), + ('email._policybase', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\_policybase.py', + 'PYMODULE'), + ('email.base64mime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\base64mime.py', + 'PYMODULE'), + ('email.charset', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\charset.py', + 'PYMODULE'), + ('email.contentmanager', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\contentmanager.py', + 'PYMODULE'), + ('email.encoders', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\encoders.py', + 'PYMODULE'), + ('email.errors', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\errors.py', + 'PYMODULE'), + ('email.feedparser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\feedparser.py', + 'PYMODULE'), + ('email.generator', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\generator.py', + 'PYMODULE'), + ('email.header', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\header.py', + 'PYMODULE'), + ('email.headerregistry', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\headerregistry.py', + 'PYMODULE'), + ('email.iterators', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\iterators.py', + 'PYMODULE'), + ('email.message', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\message.py', + 'PYMODULE'), + ('email.parser', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\parser.py', + 'PYMODULE'), + ('email.policy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\policy.py', + 'PYMODULE'), + ('email.quoprimime', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\quoprimime.py', + 'PYMODULE'), + ('email.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\email\\utils.py', + 'PYMODULE'), + ('fnmatch', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\fnmatch.py', + 'PYMODULE'), + ('fractions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\fractions.py', + 'PYMODULE'), + ('ftplib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ftplib.py', + 'PYMODULE'), + ('getopt', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\getopt.py', + 'PYMODULE'), + ('getpass', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\getpass.py', + 'PYMODULE'), + ('gettext', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\gettext.py', + 'PYMODULE'), + ('glob', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\glob.py', + 'PYMODULE'), + ('gzip', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\gzip.py', + 'PYMODULE'), + ('hashlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\hashlib.py', + 'PYMODULE'), + ('hmac', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\hmac.py', + 'PYMODULE'), + ('http', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\__init__.py', + 'PYMODULE'), + ('http.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\client.py', + 'PYMODULE'), + ('http.cookiejar', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\cookiejar.py', + 'PYMODULE'), + ('http.cookies', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\http\\cookies.py', + 'PYMODULE'), + ('idna', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\__init__.py', + 'PYMODULE'), + ('idna.core', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\core.py', + 'PYMODULE'), + ('idna.idnadata', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\idnadata.py', + 'PYMODULE'), + ('idna.intranges', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\intranges.py', + 'PYMODULE'), + ('idna.package_data', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\package_data.py', + 'PYMODULE'), + ('idna.uts46data', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\idna\\uts46data.py', + 'PYMODULE'), + ('importlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\__init__.py', + 'PYMODULE'), + ('importlib._abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_abc.py', + 'PYMODULE'), + ('importlib._bootstrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_bootstrap.py', + 'PYMODULE'), + ('importlib._bootstrap_external', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\_bootstrap_external.py', + 'PYMODULE'), + ('importlib.abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\abc.py', + 'PYMODULE'), + ('importlib.machinery', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\machinery.py', + 'PYMODULE'), + ('importlib.metadata', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\__init__.py', + 'PYMODULE'), + ('importlib.metadata._adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_adapters.py', + 'PYMODULE'), + ('importlib.metadata._collections', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_collections.py', + 'PYMODULE'), + ('importlib.metadata._functools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_functools.py', + 'PYMODULE'), + ('importlib.metadata._itertools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_itertools.py', + 'PYMODULE'), + ('importlib.metadata._meta', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_meta.py', + 'PYMODULE'), + ('importlib.metadata._text', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\metadata\\_text.py', + 'PYMODULE'), + ('importlib.readers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\readers.py', + 'PYMODULE'), + ('importlib.resources', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\__init__.py', + 'PYMODULE'), + ('importlib.resources._adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_adapters.py', + 'PYMODULE'), + ('importlib.resources._common', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_common.py', + 'PYMODULE'), + ('importlib.resources._itertools', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_itertools.py', + 'PYMODULE'), + ('importlib.resources._legacy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\_legacy.py', + 'PYMODULE'), + ('importlib.resources.abc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\abc.py', + 'PYMODULE'), + ('importlib.resources.readers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\resources\\readers.py', + 'PYMODULE'), + ('importlib.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\importlib\\util.py', + 'PYMODULE'), + ('inspect', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\inspect.py', + 'PYMODULE'), + ('ipaddress', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ipaddress.py', + 'PYMODULE'), + ('json', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\__init__.py', + 'PYMODULE'), + ('json.decoder', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\decoder.py', + 'PYMODULE'), + ('json.encoder', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\encoder.py', + 'PYMODULE'), + ('json.scanner', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\json\\scanner.py', + 'PYMODULE'), + ('logging', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\logging\\__init__.py', + 'PYMODULE'), + ('lzma', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\lzma.py', + 'PYMODULE'), + ('mimetypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\mimetypes.py', + 'PYMODULE'), + ('multiprocessing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\__init__.py', + 'PYMODULE'), + ('multiprocessing.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\connection.py', + 'PYMODULE'), + ('multiprocessing.context', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\context.py', + 'PYMODULE'), + ('multiprocessing.dummy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\dummy\\__init__.py', + 'PYMODULE'), + ('multiprocessing.dummy.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\dummy\\connection.py', + 'PYMODULE'), + ('multiprocessing.forkserver', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\forkserver.py', + 'PYMODULE'), + ('multiprocessing.heap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\heap.py', + 'PYMODULE'), + ('multiprocessing.managers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\managers.py', + 'PYMODULE'), + ('multiprocessing.pool', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\pool.py', + 'PYMODULE'), + ('multiprocessing.popen_fork', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_fork.py', + 'PYMODULE'), + ('multiprocessing.popen_forkserver', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_forkserver.py', + 'PYMODULE'), + ('multiprocessing.popen_spawn_posix', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_spawn_posix.py', + 'PYMODULE'), + ('multiprocessing.popen_spawn_win32', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\popen_spawn_win32.py', + 'PYMODULE'), + ('multiprocessing.process', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\process.py', + 'PYMODULE'), + ('multiprocessing.queues', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\queues.py', + 'PYMODULE'), + ('multiprocessing.reduction', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\reduction.py', + 'PYMODULE'), + ('multiprocessing.resource_sharer', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\resource_sharer.py', + 'PYMODULE'), + ('multiprocessing.resource_tracker', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\resource_tracker.py', + 'PYMODULE'), + ('multiprocessing.shared_memory', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\shared_memory.py', + 'PYMODULE'), + ('multiprocessing.sharedctypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\sharedctypes.py', + 'PYMODULE'), + ('multiprocessing.spawn', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\spawn.py', + 'PYMODULE'), + ('multiprocessing.synchronize', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\synchronize.py', + 'PYMODULE'), + ('multiprocessing.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\multiprocessing\\util.py', + 'PYMODULE'), + ('netrc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\netrc.py', + 'PYMODULE'), + ('nturl2path', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\nturl2path.py', + 'PYMODULE'), + ('numbers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\numbers.py', + 'PYMODULE'), + ('opcode', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\opcode.py', + 'PYMODULE'), + ('pathlib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pathlib.py', + 'PYMODULE'), + ('pickle', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pickle.py', + 'PYMODULE'), + ('pkgutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pkgutil.py', + 'PYMODULE'), + ('platform', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\platform.py', + 'PYMODULE'), + ('pprint', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\pprint.py', + 'PYMODULE'), + ('py_compile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\py_compile.py', + 'PYMODULE'), + ('pythoncom', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pythoncom.py', + 'PYMODULE'), + ('pywin', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\__init__.py', + 'PYMODULE'), + ('pywin.dialogs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\__init__.py', + 'PYMODULE'), + ('pywin.dialogs.list', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\list.py', + 'PYMODULE'), + ('pywin.dialogs.status', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\dialogs\\status.py', + 'PYMODULE'), + ('pywin.mfc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\__init__.py', + 'PYMODULE'), + ('pywin.mfc.dialog', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\dialog.py', + 'PYMODULE'), + ('pywin.mfc.object', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\object.py', + 'PYMODULE'), + ('pywin.mfc.thread', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\thread.py', + 'PYMODULE'), + ('pywin.mfc.window', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\Pythonwin\\pywin\\mfc\\window.py', + 'PYMODULE'), + ('pywin32_system32', '-', 'PYMODULE'), + ('pywintypes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\pywintypes.py', + 'PYMODULE'), + ('queue', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\queue.py', + 'PYMODULE'), + ('quopri', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\quopri.py', + 'PYMODULE'), + ('random', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\random.py', + 'PYMODULE'), + ('requests', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\__init__.py', + 'PYMODULE'), + ('requests.__version__', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\__version__.py', + 'PYMODULE'), + ('requests._internal_utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\_internal_utils.py', + 'PYMODULE'), + ('requests.adapters', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\adapters.py', + 'PYMODULE'), + ('requests.api', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\api.py', + 'PYMODULE'), + ('requests.auth', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\auth.py', + 'PYMODULE'), + ('requests.certs', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\certs.py', + 'PYMODULE'), + ('requests.compat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\compat.py', + 'PYMODULE'), + ('requests.cookies', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\cookies.py', + 'PYMODULE'), + ('requests.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\exceptions.py', + 'PYMODULE'), + ('requests.hooks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\hooks.py', + 'PYMODULE'), + ('requests.models', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\models.py', + 'PYMODULE'), + ('requests.packages', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\packages.py', + 'PYMODULE'), + ('requests.sessions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\sessions.py', + 'PYMODULE'), + ('requests.status_codes', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\status_codes.py', + 'PYMODULE'), + ('requests.structures', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\structures.py', + 'PYMODULE'), + ('requests.utils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\requests\\utils.py', + 'PYMODULE'), + ('runpy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\runpy.py', + 'PYMODULE'), + ('secrets', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\secrets.py', + 'PYMODULE'), + ('selectors', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\selectors.py', + 'PYMODULE'), + ('shutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\shutil.py', + 'PYMODULE'), + ('signal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\signal.py', + 'PYMODULE'), + ('socket', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\socket.py', + 'PYMODULE'), + ('socks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\socks.py', + 'PYMODULE'), + ('ssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ssl.py', + 'PYMODULE'), + ('statistics', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\statistics.py', + 'PYMODULE'), + ('string', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\string.py', + 'PYMODULE'), + ('stringprep', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\stringprep.py', + 'PYMODULE'), + ('subprocess', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\subprocess.py', + 'PYMODULE'), + ('tarfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tarfile.py', + 'PYMODULE'), + ('tempfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tempfile.py', + 'PYMODULE'), + ('textwrap', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\textwrap.py', + 'PYMODULE'), + ('threading', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\threading.py', + 'PYMODULE'), + ('token', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\token.py', + 'PYMODULE'), + ('tokenize', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tokenize.py', + 'PYMODULE'), + ('tracemalloc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\tracemalloc.py', + 'PYMODULE'), + ('typing', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\typing.py', + 'PYMODULE'), + ('typing_extensions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\typing_extensions.py', + 'PYMODULE'), + ('urllib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\__init__.py', + 'PYMODULE'), + ('urllib.error', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\error.py', + 'PYMODULE'), + ('urllib.parse', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\parse.py', + 'PYMODULE'), + ('urllib.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\request.py', + 'PYMODULE'), + ('urllib.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\urllib\\response.py', + 'PYMODULE'), + ('urllib3', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\__init__.py', + 'PYMODULE'), + ('urllib3._base_connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_base_connection.py', + 'PYMODULE'), + ('urllib3._collections', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_collections.py', + 'PYMODULE'), + ('urllib3._request_methods', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_request_methods.py', + 'PYMODULE'), + ('urllib3._version', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\_version.py', + 'PYMODULE'), + ('urllib3.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\connection.py', + 'PYMODULE'), + ('urllib3.connectionpool', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\connectionpool.py', + 'PYMODULE'), + ('urllib3.contrib', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\__init__.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\__init__.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\connection.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.fetch', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\fetch.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\request.py', + 'PYMODULE'), + ('urllib3.contrib.emscripten.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\emscripten\\response.py', + 'PYMODULE'), + ('urllib3.contrib.pyopenssl', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\pyopenssl.py', + 'PYMODULE'), + ('urllib3.contrib.socks', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\contrib\\socks.py', + 'PYMODULE'), + ('urllib3.exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\exceptions.py', + 'PYMODULE'), + ('urllib3.fields', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\fields.py', + 'PYMODULE'), + ('urllib3.filepost', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\filepost.py', + 'PYMODULE'), + ('urllib3.http2', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\__init__.py', + 'PYMODULE'), + ('urllib3.http2.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\connection.py', + 'PYMODULE'), + ('urllib3.http2.probe', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\http2\\probe.py', + 'PYMODULE'), + ('urllib3.poolmanager', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\poolmanager.py', + 'PYMODULE'), + ('urllib3.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\response.py', + 'PYMODULE'), + ('urllib3.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\__init__.py', + 'PYMODULE'), + ('urllib3.util.connection', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\connection.py', + 'PYMODULE'), + ('urllib3.util.proxy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\proxy.py', + 'PYMODULE'), + ('urllib3.util.request', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\request.py', + 'PYMODULE'), + ('urllib3.util.response', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\response.py', + 'PYMODULE'), + ('urllib3.util.retry', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\retry.py', + 'PYMODULE'), + ('urllib3.util.ssl_', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssl_.py', + 'PYMODULE'), + ('urllib3.util.ssl_match_hostname', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssl_match_hostname.py', + 'PYMODULE'), + ('urllib3.util.ssltransport', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\ssltransport.py', + 'PYMODULE'), + ('urllib3.util.timeout', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\timeout.py', + 'PYMODULE'), + ('urllib3.util.url', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\url.py', + 'PYMODULE'), + ('urllib3.util.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\util.py', + 'PYMODULE'), + ('urllib3.util.wait', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\urllib3\\util\\wait.py', + 'PYMODULE'), + ('win32com', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\__init__.py', + 'PYMODULE'), + ('win32com.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\__init__.py', + 'PYMODULE'), + ('win32com.client.CLSIDToClass', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\CLSIDToClass.py', + 'PYMODULE'), + ('win32com.client.build', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\build.py', + 'PYMODULE'), + ('win32com.client.dynamic', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\dynamic.py', + 'PYMODULE'), + ('win32com.client.gencache', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\gencache.py', + 'PYMODULE'), + ('win32com.client.genpy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\genpy.py', + 'PYMODULE'), + ('win32com.client.makepy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\makepy.py', + 'PYMODULE'), + ('win32com.client.selecttlb', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\selecttlb.py', + 'PYMODULE'), + ('win32com.client.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\client\\util.py', + 'PYMODULE'), + ('win32com.server', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\__init__.py', + 'PYMODULE'), + ('win32com.server.dispatcher', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\dispatcher.py', + 'PYMODULE'), + ('win32com.server.exception', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\exception.py', + 'PYMODULE'), + ('win32com.server.policy', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\policy.py', + 'PYMODULE'), + ('win32com.server.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\server\\util.py', + 'PYMODULE'), + ('win32com.universal', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\universal.py', + 'PYMODULE'), + ('win32com.util', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32com\\util.py', + 'PYMODULE'), + ('win32con', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\win32con.py', + 'PYMODULE'), + ('win32traceutil', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\win32traceutil.py', + 'PYMODULE'), + ('winerror', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\win32\\lib\\winerror.py', + 'PYMODULE'), + ('wmi', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\wmi.py', + 'PYMODULE'), + ('xml', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\__init__.py', + 'PYMODULE'), + ('xml.parsers', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\parsers\\__init__.py', + 'PYMODULE'), + ('xml.parsers.expat', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\parsers\\expat.py', + 'PYMODULE'), + ('xml.sax', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\__init__.py', + 'PYMODULE'), + ('xml.sax._exceptions', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\_exceptions.py', + 'PYMODULE'), + ('xml.sax.expatreader', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\expatreader.py', + 'PYMODULE'), + ('xml.sax.handler', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\handler.py', + 'PYMODULE'), + ('xml.sax.saxutils', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\saxutils.py', + 'PYMODULE'), + ('xml.sax.xmlreader', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xml\\sax\\xmlreader.py', + 'PYMODULE'), + ('xmlrpc', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xmlrpc\\__init__.py', + 'PYMODULE'), + ('xmlrpc.client', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\xmlrpc\\client.py', + 'PYMODULE'), + ('zipfile', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\__init__.py', + 'PYMODULE'), + ('zipfile._path', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\_path\\__init__.py', + 'PYMODULE'), + ('zipfile._path.glob', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipfile\\_path\\glob.py', + 'PYMODULE'), + ('zipimport', + 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\zipimport.py', + 'PYMODULE')]) diff --git a/build/pc_agent/base_library.zip b/build/pc_agent/base_library.zip new file mode 100644 index 0000000..843ae51 Binary files /dev/null and b/build/pc_agent/base_library.zip differ diff --git a/build/pc_agent/localpycs/pyimod01_archive.pyc b/build/pc_agent/localpycs/pyimod01_archive.pyc new file mode 100644 index 0000000..217c111 Binary files /dev/null and b/build/pc_agent/localpycs/pyimod01_archive.pyc differ diff --git a/build/pc_agent/localpycs/pyimod02_importers.pyc b/build/pc_agent/localpycs/pyimod02_importers.pyc new file mode 100644 index 0000000..ff909a9 Binary files /dev/null and b/build/pc_agent/localpycs/pyimod02_importers.pyc differ diff --git a/build/pc_agent/localpycs/pyimod03_ctypes.pyc b/build/pc_agent/localpycs/pyimod03_ctypes.pyc new file mode 100644 index 0000000..7707c7f Binary files /dev/null and b/build/pc_agent/localpycs/pyimod03_ctypes.pyc differ diff --git a/build/pc_agent/localpycs/pyimod04_pywin32.pyc b/build/pc_agent/localpycs/pyimod04_pywin32.pyc new file mode 100644 index 0000000..5f57e3b Binary files /dev/null and b/build/pc_agent/localpycs/pyimod04_pywin32.pyc differ diff --git a/build/pc_agent/localpycs/struct.pyc b/build/pc_agent/localpycs/struct.pyc new file mode 100644 index 0000000..ddc45c8 Binary files /dev/null and b/build/pc_agent/localpycs/struct.pyc differ diff --git a/build/pc_agent/pc_agent.pkg b/build/pc_agent/pc_agent.pkg new file mode 100644 index 0000000..8f67813 Binary files /dev/null and b/build/pc_agent/pc_agent.pkg differ diff --git a/build/pc_agent/warn-pc_agent.txt b/build/pc_agent/warn-pc_agent.txt new file mode 100644 index 0000000..cb4f9d6 --- /dev/null +++ b/build/pc_agent/warn-pc_agent.txt @@ -0,0 +1,58 @@ + +This file lists modules PyInstaller was not able to find. This does not +necessarily mean these modules are required for running your program. Both +Python's standard library and 3rd-party Python packages often conditionally +import optional modules, some of which may be available only on certain +platforms. + +Types of import: +* top-level: imported at the top-level - look at these first +* conditional: imported within an if-statement +* delayed: imported within a function +* optional: imported within a try-except-statement + +IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for + tracking down the missing module yourself. Thanks! + +missing module named pwd - imported by posixpath (delayed, conditional, optional), shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional), netrc (delayed, conditional), getpass (delayed) +missing module named grp - imported by shutil (delayed, optional), tarfile (optional), pathlib (delayed, optional), subprocess (delayed, conditional, optional) +missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed) +missing module named fcntl - imported by subprocess (optional) +missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional) +missing module named _scproxy - imported by urllib.request (conditional) +missing module named termios - imported by getpass (optional) +missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level) +missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level) +missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level) +excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level) +missing module named posix - imported by os (conditional, optional), posixpath (optional), shutil (conditional), importlib._bootstrap_external (conditional) +missing module named resource - imported by posix (top-level) +missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level) +missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level) +missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level) +missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level) +missing module named pyimod02_importers - imported by C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (delayed) +missing module named collections.Callable - imported by collections (optional), socks (optional) +missing module named vms_lib - imported by platform (delayed, optional) +missing module named 'java.lang' - imported by platform (delayed, optional) +missing module named java - imported by platform (delayed) +missing module named _winreg - imported by platform (delayed, optional) +missing module named simplejson - imported by requests.compat (conditional, optional) +missing module named dummy_threading - imported by requests.cookies (optional) +missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional) +missing module named annotationlib - imported by typing_extensions (conditional) +missing module named 'h2.events' - imported by urllib3.http2.connection (top-level) +missing module named 'h2.connection' - imported by urllib3.http2.connection (top-level) +missing module named h2 - imported by urllib3.http2.connection (top-level) +missing module named zstandard - imported by urllib3.util.request (optional), urllib3.response (optional) +missing module named brotli - imported by urllib3.util.request (optional), urllib3.response (optional) +missing module named brotlicffi - imported by urllib3.util.request (optional), urllib3.response (optional) +missing module named win_inet_pton - imported by socks (conditional, optional) +missing module named bcrypt - imported by cryptography.hazmat.primitives.serialization.ssh (optional) +missing module named cryptography.x509.UnsupportedExtension - imported by cryptography.x509 (optional), urllib3.contrib.pyopenssl (optional) +missing module named 'OpenSSL.crypto' - imported by urllib3.contrib.pyopenssl (delayed, conditional) +missing module named OpenSSL - imported by urllib3.contrib.pyopenssl (top-level) +missing module named 'pyodide.ffi' - imported by urllib3.contrib.emscripten.fetch (delayed, optional) +missing module named pyodide - imported by urllib3.contrib.emscripten.fetch (top-level) +missing module named js - imported by urllib3.contrib.emscripten.fetch (top-level) +missing module named 'win32com.gen_py' - imported by win32com (conditional, optional) diff --git a/build/pc_agent/xref-pc_agent.html b/build/pc_agent/xref-pc_agent.html new file mode 100644 index 0000000..7d644df --- /dev/null +++ b/build/pc_agent/xref-pc_agent.html @@ -0,0 +1,16542 @@ + + + + + modulegraph cross reference for pc_agent.py, pyi_rth_cryptography_openssl.py, pyi_rth_inspect.py, pyi_rth_multiprocessing.py, pyi_rth_pkgutil.py, pyi_rth_pythoncom.py, pyi_rth_pywintypes.py + + + +

modulegraph cross reference for pc_agent.py, pyi_rth_cryptography_openssl.py, pyi_rth_inspect.py, pyi_rth_multiprocessing.py, pyi_rth_pkgutil.py, pyi_rth_pythoncom.py, pyi_rth_pywintypes.py

+ +
+ + pc_agent.py +Script
+imports: + _collections_abc + • _weakrefset + • abc + • codecs + • collections + • collections.abc + • copyreg + • encodings + • encodings.aliases + • encodings.ascii + • encodings.base64_codec + • encodings.big5 + • encodings.big5hkscs + • encodings.bz2_codec + • encodings.charmap + • encodings.cp037 + • encodings.cp1006 + • encodings.cp1026 + • encodings.cp1125 + • encodings.cp1140 + • encodings.cp1250 + • encodings.cp1251 + • encodings.cp1252 + • encodings.cp1253 + • encodings.cp1254 + • encodings.cp1255 + • encodings.cp1256 + • encodings.cp1257 + • encodings.cp1258 + • encodings.cp273 + • encodings.cp424 + • encodings.cp437 + • encodings.cp500 + • encodings.cp720 + • encodings.cp737 + • encodings.cp775 + • encodings.cp850 + • encodings.cp852 + • encodings.cp855 + • encodings.cp856 + • encodings.cp857 + • encodings.cp858 + • encodings.cp860 + • encodings.cp861 + • encodings.cp862 + • encodings.cp863 + • encodings.cp864 + • encodings.cp865 + • encodings.cp866 + • encodings.cp869 + • encodings.cp874 + • encodings.cp875 + • encodings.cp932 + • encodings.cp949 + • encodings.cp950 + • encodings.euc_jis_2004 + • encodings.euc_jisx0213 + • encodings.euc_jp + • encodings.euc_kr + • encodings.gb18030 + • encodings.gb2312 + • encodings.gbk + • encodings.hex_codec + • encodings.hp_roman8 + • encodings.hz + • encodings.idna + • encodings.iso2022_jp + • encodings.iso2022_jp_1 + • encodings.iso2022_jp_2 + • encodings.iso2022_jp_2004 + • encodings.iso2022_jp_3 + • encodings.iso2022_jp_ext + • encodings.iso2022_kr + • encodings.iso8859_1 + • encodings.iso8859_10 + • encodings.iso8859_11 + • encodings.iso8859_13 + • encodings.iso8859_14 + • encodings.iso8859_15 + • encodings.iso8859_16 + • encodings.iso8859_2 + • encodings.iso8859_3 + • encodings.iso8859_4 + • encodings.iso8859_5 + • encodings.iso8859_6 + • encodings.iso8859_7 + • encodings.iso8859_8 + • encodings.iso8859_9 + • encodings.johab + • encodings.koi8_r + • encodings.koi8_t + • encodings.koi8_u + • encodings.kz1048 + • encodings.latin_1 + • encodings.mac_arabic + • encodings.mac_croatian + • encodings.mac_cyrillic + • encodings.mac_farsi + • encodings.mac_greek + • encodings.mac_iceland + • encodings.mac_latin2 + • encodings.mac_roman + • encodings.mac_romanian + • encodings.mac_turkish + • encodings.mbcs + • encodings.oem + • encodings.palmos + • encodings.ptcp154 + • encodings.punycode + • encodings.quopri_codec + • encodings.raw_unicode_escape + • encodings.rot_13 + • encodings.shift_jis + • encodings.shift_jis_2004 + • encodings.shift_jisx0213 + • encodings.tis_620 + • encodings.undefined + • encodings.unicode_escape + • encodings.utf_16 + • encodings.utf_16_be + • encodings.utf_16_le + • encodings.utf_32 + • encodings.utf_32_be + • encodings.utf_32_le + • encodings.utf_7 + • encodings.utf_8 + • encodings.utf_8_sig + • encodings.uu_codec + • encodings.zlib_codec + • enum + • functools + • genericpath + • heapq + • io + • json + • keyword + • linecache + • locale + • ntpath + • operator + • os + • platform + • posixpath + • pyi_rth_cryptography_openssl.py + • pyi_rth_inspect.py + • pyi_rth_multiprocessing.py + • pyi_rth_pkgutil.py + • pyi_rth_pythoncom.py + • pyi_rth_pywintypes.py + • re + • re._casefix + • re._compiler + • re._constants + • re._parser + • reprlib + • requests + • socket + • sre_compile + • sre_constants + • sre_parse + • stat + • sys + • time + • traceback + • types + • warnings + • weakref + • wmi + +
+ +
+ +
+ + pyi_rth_cryptography_openssl.py +Script
+imports: + os + • sys + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + pyi_rth_inspect.py +Script
+imports: + inspect + • os + • sys + • zipfile + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + pyi_rth_multiprocessing.py +Script
+imports: + multiprocessing + • multiprocessing.spawn + • subprocess + • sys + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + pyi_rth_pkgutil.py +Script
+imports: + pkgutil + • pyimod02_importers + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + pyi_rth_pythoncom.py +Script
+imports: + os + • sys + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + pyi_rth_pywintypes.py +Script
+imports: + os + • sys + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + 'OpenSSL.crypto' +MissingModule
+imported by: + urllib3.contrib.pyopenssl + +
+ +
+ +
+ + 'h2.connection' +MissingModule
+imported by: + urllib3.http2.connection + +
+ +
+ +
+ + 'h2.events' +MissingModule
+imported by: + urllib3.http2.connection + +
+ +
+ +
+ + 'java.lang' +MissingModule
+imported by: + platform + +
+ +
+ +
+ + 'pyodide.ffi' +MissingModule
+imported by: + urllib3.contrib.emscripten.fetch + +
+ +
+ +
+ + 'win32com.gen_py' +MissingModule
+imported by: + win32com + +
+ +
+ +
+ + OpenSSL +MissingModule
+imported by: + urllib3.contrib.pyopenssl + +
+ +
+ +
+ + __future__ +SourceModule
+imported by: + charset_normalizer + • charset_normalizer.api + • charset_normalizer.cd + • charset_normalizer.constant + • charset_normalizer.legacy + • charset_normalizer.md + • charset_normalizer.models + • charset_normalizer.utils + • charset_normalizer.version + • cryptography + • cryptography.__about__ + • cryptography.exceptions + • cryptography.hazmat + • cryptography.hazmat._oid + • cryptography.hazmat.backends + • cryptography.hazmat.backends.openssl + • cryptography.hazmat.backends.openssl.backend + • cryptography.hazmat.bindings.openssl._conditional + • cryptography.hazmat.bindings.openssl.binding + • cryptography.hazmat.decrepit + • cryptography.hazmat.decrepit.ciphers + • cryptography.hazmat.decrepit.ciphers.algorithms + • cryptography.hazmat.primitives._asymmetric + • cryptography.hazmat.primitives._cipheralgorithm + • cryptography.hazmat.primitives._serialization + • cryptography.hazmat.primitives.asymmetric.dh + • cryptography.hazmat.primitives.asymmetric.dsa + • cryptography.hazmat.primitives.asymmetric.ec + • cryptography.hazmat.primitives.asymmetric.ed25519 + • cryptography.hazmat.primitives.asymmetric.ed448 + • cryptography.hazmat.primitives.asymmetric.padding + • cryptography.hazmat.primitives.asymmetric.rsa + • cryptography.hazmat.primitives.asymmetric.types + • cryptography.hazmat.primitives.asymmetric.utils + • cryptography.hazmat.primitives.asymmetric.x25519 + • cryptography.hazmat.primitives.asymmetric.x448 + • cryptography.hazmat.primitives.ciphers + • cryptography.hazmat.primitives.ciphers.algorithms + • cryptography.hazmat.primitives.ciphers.base + • cryptography.hazmat.primitives.ciphers.modes + • cryptography.hazmat.primitives.constant_time + • cryptography.hazmat.primitives.hashes + • cryptography.hazmat.primitives.serialization + • cryptography.hazmat.primitives.serialization.ssh + • cryptography.utils + • cryptography.x509 + • cryptography.x509.base + • cryptography.x509.certificate_transparency + • cryptography.x509.extensions + • cryptography.x509.general_name + • cryptography.x509.name + • cryptography.x509.oid + • cryptography.x509.verification + • urllib3 + • urllib3._base_connection + • urllib3._collections + • urllib3._request_methods + • urllib3.connection + • urllib3.connectionpool + • urllib3.contrib.emscripten + • urllib3.contrib.emscripten.connection + • urllib3.contrib.emscripten.fetch + • urllib3.contrib.emscripten.request + • urllib3.contrib.emscripten.response + • urllib3.contrib.pyopenssl + • urllib3.contrib.socks + • urllib3.exceptions + • urllib3.fields + • urllib3.filepost + • urllib3.http2 + • urllib3.http2.connection + • urllib3.http2.probe + • urllib3.poolmanager + • urllib3.response + • urllib3.util + • urllib3.util.connection + • urllib3.util.proxy + • urllib3.util.request + • urllib3.util.response + • urllib3.util.retry + • urllib3.util.ssl_ + • urllib3.util.ssl_match_hostname + • urllib3.util.ssltransport + • urllib3.util.timeout + • urllib3.util.url + • urllib3.util.util + • urllib3.util.wait + • win32com + • win32com.client + • win32com.client.CLSIDToClass + • win32com.client.gencache + • win32com.server.dispatcher + • wmi + +
+ +
+ +
+ + _abc (builtin module)
+imported by: + abc + +
+ +
+ +
+ + _ast (builtin module)
+imported by: + ast + +
+ +
+ +
+ + _asyncio C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_asyncio.pyd
+imported by: + asyncio.events + • asyncio.futures + • asyncio.tasks + +
+ +
+ +
+ + _bisect (builtin module)
+imported by: + bisect + +
+ +
+ +
+ + _blake2 (builtin module)
+imported by: + hashlib + +
+ +
+ +
+ + _bz2 C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_bz2.pyd
+imported by: + bz2 + +
+ +
+ +
+ + _cffi_backend C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\_cffi_backend.cp312-win_amd64.pyd
+imported by: + cryptography + +
+ +
+ +
+ + _codecs (builtin module)
+imported by: + codecs + +
+ +
+ +
+ + _codecs_cn (builtin module)
+imported by: + encodings.gb18030 + • encodings.gb2312 + • encodings.gbk + • encodings.hz + +
+ +
+ +
+ + _codecs_hk (builtin module)
+imported by: + encodings.big5hkscs + +
+ +
+ +
+ + _codecs_iso2022 (builtin module) + +
+ +
+ + _codecs_jp (builtin module) + +
+ +
+ + _codecs_kr (builtin module)
+imported by: + encodings.cp949 + • encodings.euc_kr + • encodings.johab + +
+ +
+ +
+ + _codecs_tw (builtin module)
+imported by: + encodings.big5 + • encodings.cp950 + +
+ +
+ +
+ + _collections (builtin module)
+imported by: + collections + • threading + +
+ +
+ +
+ + _collections_abc +SourceModule
+imports: + abc + • sys + • warnings + +
+
+imported by: + collections + • collections.abc + • contextlib + • locale + • os + • pathlib + • pc_agent.py + • random + • types + • weakref + +
+ +
+ +
+ + _compat_pickle +SourceModule
+imported by: + _pickle + • pickle + +
+ +
+ +
+ + _compression +SourceModule
+imports: + io + • sys + +
+
+imported by: + bz2 + • gzip + • lzma + +
+ +
+ +
+ + _contextvars (builtin module)
+imported by: + contextvars + +
+ +
+ +
+ + _csv (builtin module)
+imported by: + csv + +
+ +
+ +
+ + _ctypes C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_ctypes.pyd
+imported by: + ctypes + +
+ +
+ +
+ + _datetime (builtin module)
+imports: + _strptime + • time + +
+
+imported by: + datetime + +
+ +
+ +
+ + _decimal C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_decimal.pyd
+imported by: + decimal + +
+ +
+ +
+ + _frozen_importlib +ExcludedModule
+imported by: + importlib + • importlib.abc + • zipimport + +
+ +
+ +
+ + _frozen_importlib_external +MissingModule
+imported by: + importlib + • importlib._bootstrap + • importlib.abc + • zipimport + +
+ +
+ +
+ + _functools (builtin module)
+imported by: + functools + +
+ +
+ +
+ + _hashlib C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_hashlib.pyd
+imported by: + hashlib + • hmac + +
+ +
+ +
+ + _heapq (builtin module)
+imported by: + heapq + +
+ +
+ +
+ + _imp (builtin module)
+imported by: + importlib + • importlib._bootstrap_external + • importlib.util + • zipimport + +
+ +
+ +
+ + _io (builtin module)
+imported by: + importlib._bootstrap_external + • io + • zipimport + +
+ +
+ +
+ + _json (builtin module)
+imports: + json.decoder + +
+
+imported by: + json.decoder + • json.encoder + • json.scanner + +
+ +
+ +
+ + _locale (builtin module)
+imported by: + locale + +
+ +
+ +
+ + _lzma C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_lzma.pyd
+imported by: + lzma + +
+ +
+ +
+ + _md5 (builtin module)
+imported by: + hashlib + +
+ +
+ + + +
+ + _multiprocessing C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_multiprocessing.pyd + +
+ +
+ + _opcode (builtin module)
+imported by: + opcode + +
+ +
+ +
+ + _operator (builtin module)
+imported by: + hmac + • operator + +
+ +
+ +
+ + _overlapped C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_overlapped.pyd
+imported by: + asyncio.windows_events + +
+ +
+ +
+ + _pickle (builtin module)
+imports: + _compat_pickle + • codecs + • copyreg + +
+
+imported by: + pickle + +
+ +
+ +
+ + _posixshmem +MissingModule + +
+ +
+ + _posixsubprocess +MissingModule
+imports: + gc + +
+
+imported by: + multiprocessing.util + • subprocess + +
+ +
+ +
+ + _py_abc +SourceModule
+imports: + _weakrefset + +
+
+imported by: + abc + +
+ +
+ +
+ + _pydatetime +SourceModule
+imports: + _strptime + • math + • operator + • sys + • time + • warnings + +
+
+imported by: + datetime + +
+ +
+ +
+ + _pydecimal +SourceModule
+imports: + collections + • contextvars + • itertools + • locale + • math + • numbers + • re + • sys + +
+
+imported by: + decimal + +
+ +
+ +
+ + _queue C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_queue.pyd
+imported by: + queue + +
+ +
+ +
+ + _random (builtin module)
+imported by: + random + +
+ +
+ +
+ + _scproxy +MissingModule
+imported by: + urllib.request + +
+ +
+ +
+ + _sha1 (builtin module)
+imported by: + hashlib + +
+ +
+ +
+ + _sha2 (builtin module)
+imported by: + hashlib + • random + +
+ +
+ +
+ + _sha3 (builtin module)
+imported by: + hashlib + +
+ +
+ +
+ + _signal (builtin module)
+imported by: + signal + +
+ +
+ +
+ + _socket C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_socket.pyd
+imported by: + socket + • typing_extensions + +
+ +
+ +
+ + _sre (builtin module)
+imports: + copy + • re + +
+
+imported by: + re + • re._compiler + • re._constants + +
+ +
+ +
+ + _ssl C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_ssl.pyd
+imports: + socket + +
+
+imported by: + ssl + +
+ +
+ +
+ + _stat (builtin module)
+imported by: + stat + +
+ +
+ +
+ + _statistics (builtin module)
+imported by: + statistics + +
+ +
+ +
+ + _string (builtin module)
+imported by: + string + +
+ +
+ +
+ + _strptime +SourceModule
+imports: + _thread + • calendar + • datetime + • locale + • re + • time + +
+
+imported by: + _datetime + • _pydatetime + • time + +
+ +
+ +
+ + _struct (builtin module)
+imported by: + struct + +
+ +
+ +
+ + _thread (builtin module)
+imported by: + _strptime + • dataclasses + • functools + • reprlib + • tempfile + • threading + +
+ +
+ +
+ + _threading_local +SourceModule
+imports: + contextlib + • threading + • weakref + +
+
+imported by: + threading + +
+ +
+ +
+ + _tokenize (builtin module)
+imported by: + tokenize + +
+ +
+ +
+ + _tracemalloc (builtin module)
+imported by: + tracemalloc + +
+ +
+ +
+ + _typing (builtin module)
+imported by: + typing + +
+ +
+ +
+ + _warnings (builtin module)
+imported by: + importlib._bootstrap_external + • warnings + • zipimport + +
+ +
+ +
+ + _weakref (builtin module)
+imported by: + _weakrefset + • collections + • weakref + • xml.sax.expatreader + +
+ +
+ +
+ + _weakrefset +SourceModule
+imports: + _weakref + • types + +
+
+imported by: + _py_abc + • multiprocessing.process + • pc_agent.py + • threading + • weakref + +
+ +
+ +
+ + _win32sysloader C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32\_win32sysloader.pyd
+imported by: + pywintypes + +
+ +
+ + + +
+ + _winreg +MissingModule
+imported by: + platform + +
+ +
+ +
+ + _wmi C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\_wmi.pyd
+imported by: + platform + +
+ +
+ + + +
+ + annotationlib +MissingModule
+imported by: + typing_extensions + +
+ +
+ +
+ + argparse +SourceModule
+imports: + copy + • gettext + • os + • re + • shutil + • sys + • textwrap + • warnings + +
+
+imported by: + ast + • calendar + • dis + • gzip + • inspect + • py_compile + • tarfile + • tokenize + • zipfile + +
+ +
+ +
+ + array (builtin module) + +
+ +
+ + ast +SourceModule
+imports: + _ast + • argparse + • collections + • contextlib + • enum + • inspect + • re + • sys + • warnings + +
+
+imported by: + inspect + • traceback + +
+ +
+ +
+ + asyncio +Package + + +
+ +
+ + asyncio.DefaultEventLoopPolicy +MissingModule
+imported by: + asyncio + • asyncio.events + +
+ +
+ +
+ + asyncio.base_events +SourceModule
+imports: + asyncio + • asyncio.constants + • asyncio.coroutines + • asyncio.events + • asyncio.exceptions + • asyncio.futures + • asyncio.log + • asyncio.protocols + • asyncio.sslproto + • asyncio.staggered + • asyncio.tasks + • asyncio.timeouts + • asyncio.transports + • asyncio.trsock + • collections + • collections.abc + • concurrent.futures + • errno + • functools + • heapq + • itertools + • os + • socket + • ssl + • stat + • subprocess + • sys + • threading + • time + • traceback + • warnings + • weakref + +
+ + +
+ +
+ + asyncio.base_futures +SourceModule
+imports: + asyncio + • asyncio.format_helpers + • reprlib + +
+
+imported by: + asyncio + • asyncio.base_tasks + • asyncio.futures + +
+ +
+ +
+ + asyncio.base_subprocess +SourceModule
+imports: + asyncio + • asyncio.log + • asyncio.protocols + • asyncio.transports + • collections + • subprocess + • warnings + +
+
+imported by: + asyncio + • asyncio.unix_events + • asyncio.windows_events + +
+ +
+ +
+ + asyncio.base_tasks +SourceModule
+imports: + asyncio + • asyncio.base_futures + • asyncio.coroutines + • linecache + • reprlib + • traceback + +
+
+imported by: + asyncio + • asyncio.tasks + +
+ +
+ +
+ + asyncio.constants +SourceModule
+imports: + asyncio + • enum + +
+ + +
+ +
+ + asyncio.coroutines +SourceModule
+imports: + asyncio + • collections.abc + • inspect + • os + • sys + • types + +
+ + +
+ + + + + +
+ + asyncio.format_helpers +SourceModule
+imports: + asyncio + • asyncio.constants + • functools + • inspect + • reprlib + • sys + • traceback + +
+
+imported by: + asyncio + • asyncio.base_futures + • asyncio.events + • asyncio.futures + • asyncio.streams + +
+ +
+ + + +
+ + asyncio.locks +SourceModule
+imports: + asyncio + • asyncio.exceptions + • asyncio.mixins + • collections + • enum + +
+
+imported by: + asyncio + • asyncio.queues + • asyncio.staggered + +
+ +
+ + + +
+ + asyncio.mixins +SourceModule
+imports: + asyncio + • asyncio.events + • threading + +
+
+imported by: + asyncio + • asyncio.locks + • asyncio.queues + +
+ +
+ +
+ + asyncio.proactor_events +SourceModule +
+imported by: + asyncio + • asyncio.windows_events + +
+ +
+ +
+ + asyncio.protocols +SourceModule
+imports: + asyncio + +
+ + +
+ +
+ + asyncio.queues +SourceModule
+imports: + asyncio + • asyncio.locks + • asyncio.mixins + • collections + • heapq + • types + +
+
+imported by: + asyncio + • asyncio.tasks + +
+ +
+ +
+ + asyncio.runners +SourceModule
+imports: + asyncio + • asyncio.constants + • asyncio.coroutines + • asyncio.events + • asyncio.exceptions + • asyncio.tasks + • contextvars + • enum + • functools + • signal + • threading + +
+
+imported by: + asyncio + +
+ +
+ +
+ + asyncio.selector_events +SourceModule
+imports: + asyncio + • asyncio.base_events + • asyncio.constants + • asyncio.events + • asyncio.futures + • asyncio.log + • asyncio.protocols + • asyncio.sslproto + • asyncio.transports + • asyncio.trsock + • collections + • errno + • functools + • itertools + • os + • selectors + • socket + • ssl + • warnings + • weakref + +
+
+imported by: + asyncio + • asyncio.unix_events + • asyncio.windows_events + +
+ +
+ +
+ + asyncio.sslproto +SourceModule
+imports: + asyncio + • asyncio.constants + • asyncio.exceptions + • asyncio.log + • asyncio.protocols + • asyncio.transports + • collections + • enum + • ssl + • warnings + +
+ + +
+ +
+ + asyncio.staggered +SourceModule
+imports: + asyncio + • asyncio.events + • asyncio.exceptions + • asyncio.locks + • asyncio.tasks + • contextlib + • typing + +
+
+imported by: + asyncio + • asyncio.base_events + +
+ +
+ +
+ + asyncio.streams +SourceModule +
+imported by: + asyncio + • asyncio.subprocess + +
+ +
+ +
+ + asyncio.subprocess +SourceModule
+imports: + asyncio + • asyncio.events + • asyncio.log + • asyncio.protocols + • asyncio.streams + • asyncio.tasks + • subprocess + +
+
+imported by: + asyncio + +
+ +
+ +
+ + asyncio.taskgroups +SourceModule
+imports: + asyncio + • asyncio.events + • asyncio.exceptions + • asyncio.tasks + +
+
+imported by: + asyncio + +
+ +
+ + + +
+ + asyncio.threads +SourceModule
+imports: + asyncio + • asyncio.events + • contextvars + • functools + +
+
+imported by: + asyncio + +
+ +
+ +
+ + asyncio.timeouts +SourceModule
+imports: + asyncio + • asyncio.events + • asyncio.exceptions + • asyncio.tasks + • enum + • types + • typing + +
+
+imported by: + asyncio + • asyncio.base_events + • asyncio.tasks + +
+ +
+ +
+ + asyncio.transports +SourceModule
+imports: + asyncio + +
+ + +
+ +
+ + asyncio.trsock +SourceModule
+imports: + asyncio + • socket + +
+ + +
+ +
+ + asyncio.unix_events +SourceModule +
+imported by: + asyncio + +
+ +
+ +
+ + asyncio.windows_events +SourceModule
+imports: + _overlapped + • _winapi + • asyncio + • asyncio.base_subprocess + • asyncio.events + • asyncio.exceptions + • asyncio.futures + • asyncio.log + • asyncio.proactor_events + • asyncio.selector_events + • asyncio.tasks + • asyncio.windows_utils + • errno + • functools + • math + • msvcrt + • socket + • struct + • sys + • time + • weakref + +
+
+imported by: + asyncio + +
+ +
+ +
+ + asyncio.windows_utils +SourceModule
+imports: + _winapi + • asyncio + • itertools + • msvcrt + • os + • subprocess + • sys + • tempfile + • warnings + +
+
+imported by: + asyncio + • asyncio.windows_events + +
+ +
+ +
+ + atexit (builtin module)
+imported by: + certifi.core + • logging + • multiprocessing.util + • weakref + +
+ +
+ +
+ + base64 +SourceModule
+imports: + binascii + • getopt + • re + • struct + • sys + +
+ + +
+ +
+ + bcrypt +MissingModule + +
+ + + +
+ + bisect +SourceModule
+imports: + _bisect + +
+
+imported by: + idna.core + • idna.intranges + • multiprocessing.heap + • random + • statistics + • urllib.request + +
+ +
+ +
+ + brotli +MissingModule
+imported by: + urllib3.response + • urllib3.util.request + +
+ +
+ +
+ + brotlicffi +MissingModule
+imported by: + urllib3.response + • urllib3.util.request + +
+ +
+ +
+ + builtins (builtin module)
+imported by: + bz2 + • codecs + • enum + • gettext + • gzip + • inspect + • locale + • lzma + • operator + • reprlib + • subprocess + • tarfile + • tokenize + • typing_extensions + • warnings + • win32com.client.build + +
+ +
+ +
+ + bz2 +SourceModule
+imports: + _bz2 + • _compression + • builtins + • io + • os + +
+
+imported by: + encodings.bz2_codec + • shutil + • tarfile + • zipfile + +
+ +
+ +
+ + calendar +SourceModule
+imports: + argparse + • datetime + • enum + • itertools + • locale + • sys + • warnings + +
+
+imported by: + _strptime + • email._parseaddr + • http.cookiejar + • requests.cookies + • ssl + +
+ +
+ +
+ + certifi +Package
+imports: + certifi.core + +
+
+imported by: + certifi.core + • requests.certs + +
+ +
+ +
+ + certifi.core +SourceModule
+imports: + atexit + • certifi + • importlib.resources + • os + • sys + • types + • typing + +
+
+imported by: + certifi + +
+ +
+ + + +
+ + chardet.big5freq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ +
+ + chardet.big5prober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ + + +
+ + chardet.charsetgroupprober +SourceModule
+imports: + chardet + • chardet.charsetprober + • chardet.enums + • typing + +
+ + +
+ + + + + +
+ + chardet.codingstatemachinedict +SourceModule
+imports: + chardet + • typing + +
+
+imported by: + chardet.codingstatemachine + • chardet.escsm + • chardet.mbcssm + +
+ +
+ +
+ + chardet.cp949prober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ + + +
+ + chardet.escprober +SourceModule +
+imported by: + chardet.universaldetector + +
+ +
+ +
+ + chardet.escsm +SourceModule +
+imported by: + chardet.escprober + +
+ +
+ + + +
+ + chardet.euckrfreq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ +
+ + chardet.euckrprober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ +
+ + chardet.euctwfreq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ +
+ + chardet.euctwprober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ +
+ + chardet.gb2312freq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ + + +
+ + chardet.hebrewprober +SourceModule +
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.jisfreq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ +
+ + chardet.johabfreq +SourceModule
+imports: + chardet + +
+
+imported by: + chardet.chardistribution + +
+ +
+ +
+ + chardet.johabprober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ +
+ + chardet.jpcntx +SourceModule
+imports: + chardet + • typing + +
+
+imported by: + chardet.eucjpprober + • chardet.sjisprober + +
+ +
+ +
+ + chardet.langbulgarianmodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.langgreekmodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.langhebrewmodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.langrussianmodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.langthaimodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.langturkishmodel +SourceModule
+imports: + chardet + • chardet.sbcharsetprober + +
+
+imported by: + chardet.sbcsgroupprober + +
+ +
+ +
+ + chardet.latin1prober +SourceModule
+imports: + chardet + • chardet.charsetprober + • chardet.enums + • typing + +
+
+imported by: + chardet.universaldetector + +
+ +
+ +
+ + chardet.macromanprober +SourceModule
+imports: + chardet + • chardet.charsetprober + • chardet.enums + • typing + +
+
+imported by: + chardet.universaldetector + +
+ +
+ + + + + + + +
+ + chardet.resultdict +SourceModule
+imports: + chardet + • typing + +
+
+imported by: + chardet + • chardet.universaldetector + +
+ +
+ + + + + +
+ + chardet.sjisprober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ + + +
+ + chardet.utf1632prober +SourceModule
+imports: + chardet + • chardet.charsetprober + • chardet.enums + • typing + +
+
+imported by: + chardet.universaldetector + +
+ +
+ +
+ + chardet.utf8prober +SourceModule +
+imported by: + chardet.mbcsgroupprober + +
+ +
+ +
+ + chardet.version +SourceModule
+imports: + chardet + +
+
+imported by: + chardet + +
+ +
+ + + + + + + + + +
+ + charset_normalizer.legacy +SourceModule +
+imported by: + charset_normalizer + +
+ +
+ +
+ + charset_normalizer.md C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\charset_normalizer\md.cp312-win_amd64.pyd +
+imported by: + charset_normalizer.api + • charset_normalizer.cd + +
+ +
+ +
+ + charset_normalizer.md__mypyc C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\charset_normalizer\md__mypyc.cp312-win_amd64.pyd
+imports: + charset_normalizer + +
+
+imported by: + charset_normalizer + +
+ +
+ + + + + +
+ + charset_normalizer.version +SourceModule
+imports: + __future__ + • charset_normalizer + +
+
+imported by: + charset_normalizer + +
+ +
+ +
+ + codecs +SourceModule
+imports: + _codecs + • builtins + • encodings + • sys + +
+
+imported by: + _pickle + • chardet.universaldetector + • charset_normalizer.cd + • charset_normalizer.constant + • charset_normalizer.utils + • encodings + • encodings.ascii + • encodings.base64_codec + • encodings.big5 + • encodings.big5hkscs + • encodings.bz2_codec + • encodings.charmap + • encodings.cp037 + • encodings.cp1006 + • encodings.cp1026 + • encodings.cp1125 + • encodings.cp1140 + • encodings.cp1250 + • encodings.cp1251 + • encodings.cp1252 + • encodings.cp1253 + • encodings.cp1254 + • encodings.cp1255 + • encodings.cp1256 + • encodings.cp1257 + • encodings.cp1258 + • encodings.cp273 + • encodings.cp424 + • encodings.cp437 + • encodings.cp500 + • encodings.cp720 + • encodings.cp737 + • encodings.cp775 + • encodings.cp850 + • encodings.cp852 + • encodings.cp855 + • encodings.cp856 + • encodings.cp857 + • encodings.cp858 + • encodings.cp860 + • encodings.cp861 + • encodings.cp862 + • encodings.cp863 + • encodings.cp864 + • encodings.cp865 + • encodings.cp866 + • encodings.cp869 + • encodings.cp874 + • encodings.cp875 + • encodings.cp932 + • encodings.cp949 + • encodings.cp950 + • encodings.euc_jis_2004 + • encodings.euc_jisx0213 + • encodings.euc_jp + • encodings.euc_kr + • encodings.gb18030 + • encodings.gb2312 + • encodings.gbk + • encodings.hex_codec + • encodings.hp_roman8 + • encodings.hz + • encodings.idna + • encodings.iso2022_jp + • encodings.iso2022_jp_1 + • encodings.iso2022_jp_2 + • encodings.iso2022_jp_2004 + • encodings.iso2022_jp_3 + • encodings.iso2022_jp_ext + • encodings.iso2022_kr + • encodings.iso8859_1 + • encodings.iso8859_10 + • encodings.iso8859_11 + • encodings.iso8859_13 + • encodings.iso8859_14 + • encodings.iso8859_15 + • encodings.iso8859_16 + • encodings.iso8859_2 + • encodings.iso8859_3 + • encodings.iso8859_4 + • encodings.iso8859_5 + • encodings.iso8859_6 + • encodings.iso8859_7 + • encodings.iso8859_8 + • encodings.iso8859_9 + • encodings.johab + • encodings.koi8_r + • encodings.koi8_t + • encodings.koi8_u + • encodings.kz1048 + • encodings.latin_1 + • encodings.mac_arabic + • encodings.mac_croatian + • encodings.mac_cyrillic + • encodings.mac_farsi + • encodings.mac_greek + • encodings.mac_iceland + • encodings.mac_latin2 + • encodings.mac_roman + • encodings.mac_romanian + • encodings.mac_turkish + • encodings.mbcs + • encodings.oem + • encodings.palmos + • encodings.ptcp154 + • encodings.punycode + • encodings.quopri_codec + • encodings.raw_unicode_escape + • encodings.rot_13 + • encodings.shift_jis + • encodings.shift_jis_2004 + • encodings.shift_jisx0213 + • encodings.tis_620 + • encodings.undefined + • encodings.unicode_escape + • encodings.utf_16 + • encodings.utf_16_be + • encodings.utf_16_le + • encodings.utf_32 + • encodings.utf_32_be + • encodings.utf_32_le + • encodings.utf_7 + • encodings.utf_8 + • encodings.utf_8_sig + • encodings.uu_codec + • encodings.zlib_codec + • json + • pc_agent.py + • pickle + • requests.utils + • tokenize + • urllib3.filepost + • xml.sax.saxutils + +
+ +
+ + + +
+ + collections.Callable +MissingModule
+imported by: + collections + • socks + +
+ +
+ + + +
+ + commctrl +SourceModule
+imported by: + pywin.dialogs.list + +
+ +
+ +
+ + concurrent +Package
+imported by: + concurrent.futures + +
+ +
+ + + +
+ + concurrent.futures._base +SourceModule
+imports: + collections + • concurrent.futures + • logging + • threading + • time + • types + +
+ + +
+ +
+ + concurrent.futures.process +SourceModule +
+imported by: + concurrent.futures + +
+ +
+ +
+ + concurrent.futures.thread +SourceModule
+imports: + concurrent.futures + • concurrent.futures._base + • itertools + • os + • queue + • threading + • types + • weakref + +
+
+imported by: + concurrent.futures + +
+ +
+ + + +
+ + contextvars +SourceModule
+imports: + _contextvars + +
+
+imported by: + _pydecimal + • asyncio.events + • asyncio.futures + • asyncio.runners + • asyncio.tasks + • asyncio.threads + +
+ +
+ +
+ + copy +SourceModule
+imports: + copyreg + • types + • weakref + +
+
+imported by: + _sre + • argparse + • collections + • dataclasses + • email.generator + • gettext + • http.cookiejar + • requests.cookies + • tarfile + • weakref + +
+ +
+ +
+ + copyreg +SourceModule
+imports: + functools + • operator + +
+
+imported by: + _pickle + • copy + • multiprocessing.reduction + • pc_agent.py + • pickle + • re + • typing + +
+ +
+ + + +
+ + cryptography.__about__ +SourceModule
+imports: + __future__ + • cryptography + +
+
+imported by: + cryptography + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + cryptography.hazmat.decrepit +Package
+imports: + __future__ + • cryptography.hazmat + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + csv +SourceModule
+imports: + _csv + • io + • re + • types + +
+
+imported by: + importlib.metadata + • wmi + +
+ +
+ +
+ + ctypes +Package
+imports: + _ctypes + • ctypes._endian + • nt + • os + • struct + • sys + • types + +
+
+imported by: + ctypes._endian + • multiprocessing.sharedctypes + +
+ +
+ +
+ + ctypes._endian +SourceModule
+imports: + ctypes + • sys + +
+
+imported by: + ctypes + +
+ +
+ +
+ + dataclasses +SourceModule
+imports: + _thread + • abc + • copy + • functools + • inspect + • itertools + • keyword + • re + • sys + • types + +
+ + +
+ +
+ + datetime +SourceModule
+imports: + _datetime + • _pydatetime + • time + +
+ + +
+ +
+ + decimal +SourceModule
+imports: + _decimal + • _pydecimal + +
+
+imported by: + fractions + • statistics + • xmlrpc.client + +
+ +
+ +
+ + dis +SourceModule
+imports: + argparse + • collections + • io + • opcode + • sys + • types + +
+
+imported by: + inspect + +
+ +
+ +
+ + dummy_threading +MissingModule
+imported by: + requests.cookies + +
+ +
+ + + +
+ + email._encoded_words +SourceModule
+imports: + base64 + • binascii + • email + • email.errors + • functools + • re + • string + +
+
+imported by: + email._header_value_parser + • email.message + +
+ +
+ +
+ + email._header_value_parser +SourceModule
+imports: + email + • email._encoded_words + • email.errors + • email.utils + • operator + • re + • string + • sys + • urllib + +
+
+imported by: + email + • email.headerregistry + +
+ +
+ +
+ + email._parseaddr +SourceModule
+imports: + calendar + • email + • time + +
+
+imported by: + email.utils + +
+ +
+ +
+ + email._policybase +SourceModule
+imports: + abc + • email + • email.charset + • email.header + • email.utils + +
+
+imported by: + email.feedparser + • email.message + • email.parser + • email.policy + +
+ +
+ +
+ + email.base64mime +SourceModule
+imports: + base64 + • binascii + • email + +
+
+imported by: + email.charset + • email.header + +
+ +
+ +
+ + email.charset +SourceModule
+imports: + email + • email.base64mime + • email.encoders + • email.errors + • email.quoprimime + • functools + +
+
+imported by: + email + • email._policybase + • email.contentmanager + • email.header + • email.message + • email.utils + +
+ +
+ +
+ + email.contentmanager +SourceModule
+imports: + binascii + • email + • email.charset + • email.errors + • email.message + • email.quoprimime + +
+
+imported by: + email.policy + +
+ +
+ +
+ + email.encoders +SourceModule
+imports: + base64 + • email + • quopri + +
+
+imported by: + email.charset + +
+ +
+ + + +
+ + email.feedparser +SourceModule
+imports: + collections + • email + • email._policybase + • email.errors + • email.message + • io + • re + +
+
+imported by: + email.parser + +
+ +
+ +
+ + email.generator +SourceModule
+imports: + copy + • email + • email.errors + • email.utils + • io + • random + • re + • sys + • time + +
+
+imported by: + email.message + +
+ +
+ +
+ + email.header +SourceModule
+imports: + binascii + • email + • email.base64mime + • email.charset + • email.errors + • email.quoprimime + • re + +
+
+imported by: + email + • email._policybase + +
+ +
+ +
+ + email.headerregistry +SourceModule
+imports: + email + • email._header_value_parser + • email.errors + • email.utils + • types + +
+
+imported by: + email.policy + +
+ +
+ +
+ + email.iterators +SourceModule
+imports: + email + • io + • sys + +
+
+imported by: + email.message + +
+ +
+ +
+ + email.message +SourceModule
+imports: + binascii + • email + • email._encoded_words + • email._policybase + • email.charset + • email.errors + • email.generator + • email.iterators + • email.policy + • email.utils + • io + • quopri + • re + +
+ + +
+ +
+ + email.parser +SourceModule
+imports: + email + • email._policybase + • email.feedparser + • io + +
+
+imported by: + email + • http.client + • urllib3.contrib.emscripten.fetch + +
+ +
+ +
+ + email.policy +SourceModule
+imports: + email + • email._policybase + • email.contentmanager + • email.headerregistry + • email.message + • email.utils + • re + • sys + +
+
+imported by: + email.message + +
+ +
+ +
+ + email.quoprimime +SourceModule
+imports: + email + • re + • string + +
+
+imported by: + email.charset + • email.contentmanager + • email.header + +
+ +
+ +
+ + email.utils +SourceModule
+imports: + datetime + • email + • email._parseaddr + • email.charset + • os + • random + • re + • socket + • time + • urllib.parse + • warnings + +
+ + +
+ +
+ + encodings +Package
+imports: + _winapi + • codecs + • encodings + • encodings.aliases + • encodings.ascii + • encodings.base64_codec + • encodings.big5 + • encodings.big5hkscs + • encodings.bz2_codec + • encodings.charmap + • encodings.cp037 + • encodings.cp1006 + • encodings.cp1026 + • encodings.cp1125 + • encodings.cp1140 + • encodings.cp1250 + • encodings.cp1251 + • encodings.cp1252 + • encodings.cp1253 + • encodings.cp1254 + • encodings.cp1255 + • encodings.cp1256 + • encodings.cp1257 + • encodings.cp1258 + • encodings.cp273 + • encodings.cp424 + • encodings.cp437 + • encodings.cp500 + • encodings.cp720 + • encodings.cp737 + • encodings.cp775 + • encodings.cp850 + • encodings.cp852 + • encodings.cp855 + • encodings.cp856 + • encodings.cp857 + • encodings.cp858 + • encodings.cp860 + • encodings.cp861 + • encodings.cp862 + • encodings.cp863 + • encodings.cp864 + • encodings.cp865 + • encodings.cp866 + • encodings.cp869 + • encodings.cp874 + • encodings.cp875 + • encodings.cp932 + • encodings.cp949 + • encodings.cp950 + • encodings.euc_jis_2004 + • encodings.euc_jisx0213 + • encodings.euc_jp + • encodings.euc_kr + • encodings.gb18030 + • encodings.gb2312 + • encodings.gbk + • encodings.hex_codec + • encodings.hp_roman8 + • encodings.hz + • encodings.idna + • encodings.iso2022_jp + • encodings.iso2022_jp_1 + • encodings.iso2022_jp_2 + • encodings.iso2022_jp_2004 + • encodings.iso2022_jp_3 + • encodings.iso2022_jp_ext + • encodings.iso2022_kr + • encodings.iso8859_1 + • encodings.iso8859_10 + • encodings.iso8859_11 + • encodings.iso8859_13 + • encodings.iso8859_14 + • encodings.iso8859_15 + • encodings.iso8859_16 + • encodings.iso8859_2 + • encodings.iso8859_3 + • encodings.iso8859_4 + • encodings.iso8859_5 + • encodings.iso8859_6 + • encodings.iso8859_7 + • encodings.iso8859_8 + • encodings.iso8859_9 + • encodings.johab + • encodings.koi8_r + • encodings.koi8_t + • encodings.koi8_u + • encodings.kz1048 + • encodings.latin_1 + • encodings.mac_arabic + • encodings.mac_croatian + • encodings.mac_cyrillic + • encodings.mac_farsi + • encodings.mac_greek + • encodings.mac_iceland + • encodings.mac_latin2 + • encodings.mac_roman + • encodings.mac_romanian + • encodings.mac_turkish + • encodings.mbcs + • encodings.oem + • encodings.palmos + • encodings.ptcp154 + • encodings.punycode + • encodings.quopri_codec + • encodings.raw_unicode_escape + • encodings.rot_13 + • encodings.shift_jis + • encodings.shift_jis_2004 + • encodings.shift_jisx0213 + • encodings.tis_620 + • encodings.undefined + • encodings.unicode_escape + • encodings.utf_16 + • encodings.utf_16_be + • encodings.utf_16_le + • encodings.utf_32 + • encodings.utf_32_be + • encodings.utf_32_le + • encodings.utf_7 + • encodings.utf_8 + • encodings.utf_8_sig + • encodings.uu_codec + • encodings.zlib_codec + • sys + +
+
+imported by: + codecs + • encodings + • encodings.aliases + • encodings.ascii + • encodings.base64_codec + • encodings.big5 + • encodings.big5hkscs + • encodings.bz2_codec + • encodings.charmap + • encodings.cp037 + • encodings.cp1006 + • encodings.cp1026 + • encodings.cp1125 + • encodings.cp1140 + • encodings.cp1250 + • encodings.cp1251 + • encodings.cp1252 + • encodings.cp1253 + • encodings.cp1254 + • encodings.cp1255 + • encodings.cp1256 + • encodings.cp1257 + • encodings.cp1258 + • encodings.cp273 + • encodings.cp424 + • encodings.cp437 + • encodings.cp500 + • encodings.cp720 + • encodings.cp737 + • encodings.cp775 + • encodings.cp850 + • encodings.cp852 + • encodings.cp855 + • encodings.cp856 + • encodings.cp857 + • encodings.cp858 + • encodings.cp860 + • encodings.cp861 + • encodings.cp862 + • encodings.cp863 + • encodings.cp864 + • encodings.cp865 + • encodings.cp866 + • encodings.cp869 + • encodings.cp874 + • encodings.cp875 + • encodings.cp932 + • encodings.cp949 + • encodings.cp950 + • encodings.euc_jis_2004 + • encodings.euc_jisx0213 + • encodings.euc_jp + • encodings.euc_kr + • encodings.gb18030 + • encodings.gb2312 + • encodings.gbk + • encodings.hex_codec + • encodings.hp_roman8 + • encodings.hz + • encodings.idna + • encodings.iso2022_jp + • encodings.iso2022_jp_1 + • encodings.iso2022_jp_2 + • encodings.iso2022_jp_2004 + • encodings.iso2022_jp_3 + • encodings.iso2022_jp_ext + • encodings.iso2022_kr + • encodings.iso8859_1 + • encodings.iso8859_10 + • encodings.iso8859_11 + • encodings.iso8859_13 + • encodings.iso8859_14 + • encodings.iso8859_15 + • encodings.iso8859_16 + • encodings.iso8859_2 + • encodings.iso8859_3 + • encodings.iso8859_4 + • encodings.iso8859_5 + • encodings.iso8859_6 + • encodings.iso8859_7 + • encodings.iso8859_8 + • encodings.iso8859_9 + • encodings.johab + • encodings.koi8_r + • encodings.koi8_t + • encodings.koi8_u + • encodings.kz1048 + • encodings.latin_1 + • encodings.mac_arabic + • encodings.mac_croatian + • encodings.mac_cyrillic + • encodings.mac_farsi + • encodings.mac_greek + • encodings.mac_iceland + • encodings.mac_latin2 + • encodings.mac_roman + • encodings.mac_romanian + • encodings.mac_turkish + • encodings.mbcs + • encodings.oem + • encodings.palmos + • encodings.ptcp154 + • encodings.punycode + • encodings.quopri_codec + • encodings.raw_unicode_escape + • encodings.rot_13 + • encodings.shift_jis + • encodings.shift_jis_2004 + • encodings.shift_jisx0213 + • encodings.tis_620 + • encodings.undefined + • encodings.unicode_escape + • encodings.utf_16 + • encodings.utf_16_be + • encodings.utf_16_le + • encodings.utf_32 + • encodings.utf_32_be + • encodings.utf_32_le + • encodings.utf_7 + • encodings.utf_8 + • encodings.utf_8_sig + • encodings.uu_codec + • encodings.zlib_codec + • locale + • pc_agent.py + +
+ +
+ +
+ + encodings.aliases +SourceModule
+imports: + encodings + +
+ + +
+ +
+ + encodings.ascii +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.base64_codec +SourceModule
+imports: + base64 + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.big5 +SourceModule
+imports: + _codecs_tw + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.big5hkscs +SourceModule
+imports: + _codecs_hk + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.bz2_codec +SourceModule
+imports: + bz2 + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.charmap +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp037 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1006 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1026 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1125 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1140 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1250 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1251 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1252 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1253 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1254 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1255 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1256 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1257 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp1258 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp273 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp424 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp437 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp500 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp720 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp737 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp775 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp850 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp852 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp855 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp856 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp857 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp858 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp860 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp861 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp862 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp863 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp864 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp865 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp866 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp869 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp874 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp875 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp932 +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp949 +SourceModule
+imports: + _codecs_kr + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.cp950 +SourceModule
+imports: + _codecs_tw + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.euc_jis_2004 +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.euc_jisx0213 +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.euc_jp +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.euc_kr +SourceModule
+imports: + _codecs_kr + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.gb18030 +SourceModule
+imports: + _codecs_cn + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.gb2312 +SourceModule
+imports: + _codecs_cn + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.gbk +SourceModule
+imports: + _codecs_cn + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.hex_codec +SourceModule
+imports: + binascii + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.hp_roman8 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.hz +SourceModule
+imports: + _codecs_cn + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.idna +SourceModule
+imports: + codecs + • encodings + • re + • stringprep + • unicodedata + +
+
+imported by: + encodings + • pc_agent.py + • requests.models + +
+ +
+ +
+ + encodings.iso2022_jp +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_jp_1 +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_jp_2 +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_jp_2004 +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_jp_3 +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_jp_ext +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso2022_kr +SourceModule
+imports: + _codecs_iso2022 + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_1 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_10 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_11 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_13 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_14 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_15 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_16 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_2 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_3 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_4 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_5 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_6 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_7 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_8 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.iso8859_9 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.johab +SourceModule
+imports: + _codecs_kr + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.koi8_r +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.koi8_t +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.koi8_u +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.kz1048 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.latin_1 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_arabic +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_croatian +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_cyrillic +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_farsi +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_greek +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_iceland +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_latin2 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_roman +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_romanian +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mac_turkish +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.mbcs +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.oem +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.palmos +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.ptcp154 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.punycode +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.quopri_codec +SourceModule
+imports: + codecs + • encodings + • io + • quopri + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.raw_unicode_escape +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.rot_13 +SourceModule
+imports: + codecs + • encodings + • sys + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.shift_jis +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.shift_jis_2004 +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.shift_jisx0213 +SourceModule
+imports: + _codecs_jp + • _multibytecodec + • codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.tis_620 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.undefined +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.unicode_escape +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_16 +SourceModule
+imports: + codecs + • encodings + • sys + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_16_be +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_16_le +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_32 +SourceModule
+imports: + codecs + • encodings + • sys + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_32_be +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_32_le +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_7 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_8 +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.utf_8_sig +SourceModule
+imports: + codecs + • encodings + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.uu_codec +SourceModule
+imports: + binascii + • codecs + • encodings + • io + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + encodings.zlib_codec +SourceModule
+imports: + codecs + • encodings + • zlib + +
+
+imported by: + encodings + • pc_agent.py + +
+ +
+ +
+ + enum +SourceModule
+imports: + builtins + • functools + • operator + • sys + • types + • warnings + +
+ + +
+ + + +
+ + fcntl +MissingModule
+imported by: + subprocess + +
+ +
+ +
+ + fnmatch +SourceModule
+imports: + functools + • os + • posixpath + • re + +
+
+imported by: + glob + • pathlib + • shutil + • tracemalloc + • urllib.request + +
+ +
+ +
+ + fractions +SourceModule
+imports: + decimal + • functools + • math + • numbers + • operator + • re + • sys + +
+
+imported by: + statistics + +
+ +
+ +
+ + ftplib +SourceModule
+imports: + netrc + • re + • socket + • ssl + • sys + +
+
+imported by: + urllib.request + +
+ +
+ + + +
+ + gc (builtin module)
+imports: + time + +
+
+imported by: + _posixsubprocess + • weakref + +
+ +
+ +
+ + genericpath +SourceModule
+imports: + os + • stat + +
+
+imported by: + ntpath + • pc_agent.py + • posixpath + +
+ +
+ +
+ + getopt +SourceModule
+imports: + gettext + • os + • sys + +
+
+imported by: + base64 + • mimetypes + • quopri + • win32com.client.gencache + • win32com.client.makepy + +
+ +
+ +
+ + getpass +SourceModule
+imports: + contextlib + • io + • msvcrt + • os + • pwd + • sys + • termios + • warnings + +
+
+imported by: + urllib.request + +
+ +
+ +
+ + gettext +SourceModule
+imports: + builtins + • copy + • errno + • locale + • operator + • os + • re + • struct + • sys + • warnings + +
+
+imported by: + argparse + • getopt + +
+ +
+ +
+ + glob +SourceModule
+imports: + contextlib + • fnmatch + • itertools + • os + • re + • stat + • sys + +
+
+imported by: + win32com.client.gencache + +
+ +
+ +
+ + grp +MissingModule
+imported by: + pathlib + • shutil + • subprocess + • tarfile + +
+ +
+ +
+ + gzip +SourceModule
+imports: + _compression + • argparse + • builtins + • errno + • io + • os + • struct + • sys + • time + • warnings + • zlib + +
+
+imported by: + tarfile + • xmlrpc.client + +
+ +
+ +
+ + h2 +MissingModule
+imported by: + urllib3.http2.connection + +
+ +
+ +
+ + hashlib +SourceModule
+imports: + _blake2 + • _hashlib + • _md5 + • _sha1 + • _sha2 + • _sha3 + • logging + +
+ + +
+ +
+ + heapq +SourceModule
+imports: + _heapq + +
+
+imported by: + asyncio.base_events + • asyncio.queues + • collections + • pc_agent.py + • queue + +
+ +
+ +
+ + hmac +SourceModule
+imports: + _hashlib + • _operator + • hashlib + • warnings + +
+ + +
+ +
+ + http +Package
+imports: + enum + • http.cookiejar + +
+
+imported by: + http.client + • http.cookiejar + • http.cookies + • requests.compat + +
+ +
+ +
+ + http.client +SourceModule
+imports: + collections.abc + • email.message + • email.parser + • errno + • http + • io + • re + • socket + • ssl + • sys + • urllib.parse + +
+ + +
+ +
+ + http.cookiejar +SourceModule
+imports: + calendar + • copy + • datetime + • http + • http.client + • io + • logging + • os + • re + • threading + • time + • traceback + • urllib.parse + • urllib.request + • warnings + +
+
+imported by: + http + • requests.compat + • urllib.request + +
+ +
+ +
+ + http.cookies +SourceModule
+imports: + http + • re + • string + • time + • types + +
+
+imported by: + requests.compat + +
+ +
+ +
+ + idna +Package
+imports: + idna + • idna.core + • idna.idnadata + • idna.intranges + • idna.package_data + +
+ + +
+ +
+ + idna.core +SourceModule
+imports: + bisect + • idna + • idna.idnadata + • idna.intranges + • idna.uts46data + • re + • typing + • unicodedata + +
+
+imported by: + idna + +
+ +
+ +
+ + idna.idnadata +SourceModule
+imports: + idna + +
+
+imported by: + idna + • idna.core + +
+ +
+ +
+ + idna.intranges +SourceModule
+imports: + bisect + • idna + • typing + +
+
+imported by: + idna + • idna.core + +
+ +
+ +
+ + idna.package_data +SourceModule
+imports: + idna + +
+
+imported by: + idna + +
+ +
+ +
+ + idna.uts46data +SourceModule
+imports: + idna + • typing + +
+
+imported by: + idna.core + +
+ +
+ + + +
+ + importlib._abc +SourceModule
+imports: + abc + • importlib + • importlib._bootstrap + +
+
+imported by: + importlib.abc + • importlib.util + +
+ +
+ +
+ + importlib._bootstrap +SourceModule
+imports: + _frozen_importlib_external + • importlib + +
+
+imported by: + importlib + • importlib._abc + • importlib.machinery + • importlib.util + +
+ +
+ +
+ + importlib._bootstrap_external +SourceModule
+imports: + _imp + • _io + • _warnings + • importlib + • importlib.metadata + • importlib.readers + • marshal + • nt + • posix + • sys + • tokenize + • winreg + +
+
+imported by: + importlib + • importlib.abc + • importlib.machinery + • importlib.util + • py_compile + +
+ +
+ + + +
+ + importlib.machinery +SourceModule +
+imported by: + importlib.abc + • inspect + • pkgutil + • py_compile + • pywintypes + • runpy + +
+ +
+ + + +
+ + importlib.metadata._adapters +SourceModule
+imports: + email.message + • functools + • importlib.metadata + • importlib.metadata._text + • re + • textwrap + • warnings + +
+
+imported by: + importlib.metadata + +
+ +
+ +
+ + importlib.metadata._collections +SourceModule
+imports: + collections + • importlib.metadata + +
+
+imported by: + importlib.metadata + +
+ +
+ +
+ + importlib.metadata._functools +SourceModule
+imports: + functools + • importlib.metadata + • types + +
+
+imported by: + importlib.metadata + • importlib.metadata._text + +
+ +
+ +
+ + importlib.metadata._itertools +SourceModule
+imports: + importlib.metadata + • itertools + +
+
+imported by: + importlib.metadata + +
+ +
+ +
+ + importlib.metadata._meta +SourceModule
+imports: + importlib.metadata + • typing + +
+
+imported by: + importlib.metadata + +
+ +
+ +
+ + importlib.metadata._text +SourceModule +
+imported by: + importlib.metadata._adapters + +
+ +
+ +
+ + importlib.readers +SourceModule
+imports: + importlib + • importlib.resources.readers + +
+
+imported by: + importlib._bootstrap_external + • zipimport + +
+ +
+ + + +
+ + importlib.resources._adapters +SourceModule
+imports: + contextlib + • importlib.resources + • importlib.resources.abc + • io + +
+
+imported by: + importlib.resources._common + +
+ +
+ +
+ + importlib.resources._common +SourceModule
+imports: + contextlib + • functools + • importlib + • importlib.resources + • importlib.resources._adapters + • importlib.resources.abc + • inspect + • itertools + • os + • pathlib + • tempfile + • types + • typing + • warnings + +
+ + +
+ +
+ + importlib.resources._itertools +SourceModule
+imports: + importlib.resources + +
+
+imported by: + importlib.resources.readers + +
+ +
+ +
+ + importlib.resources._legacy +SourceModule
+imports: + functools + • importlib.resources + • importlib.resources._common + • os + • pathlib + • types + • typing + • warnings + +
+
+imported by: + importlib.resources + +
+ +
+ +
+ + importlib.resources.abc +SourceModule
+imports: + abc + • importlib.resources + • io + • itertools + • os + • pathlib + • typing + +
+ + +
+ +
+ + importlib.resources.readers +SourceModule +
+imported by: + importlib.readers + +
+ +
+ +
+ + importlib.util +SourceModule
+imports: + _imp + • importlib + • importlib._abc + • importlib._bootstrap + • importlib._bootstrap_external + • sys + • threading + • types + +
+
+imported by: + pkgutil + • py_compile + • pywintypes + • runpy + • zipfile + +
+ +
+ +
+ + inspect +SourceModule
+imports: + abc + • argparse + • ast + • builtins + • collections + • collections.abc + • dis + • enum + • functools + • importlib + • importlib.machinery + • itertools + • keyword + • linecache + • operator + • os + • re + • sys + • token + • tokenize + • types + • weakref + +
+ + +
+ + + +
+ + ipaddress +SourceModule
+imports: + functools + • re + +
+ + +
+ + + +
+ + java +MissingModule
+imported by: + platform + +
+ +
+ +
+ + js +MissingModule
+imported by: + urllib3.contrib.emscripten.fetch + +
+ +
+ + + +
+ + json.decoder +SourceModule
+imports: + _json + • json + • json.scanner + • re + +
+
+imported by: + _json + • json + +
+ +
+ +
+ + json.encoder +SourceModule
+imports: + _json + • json + • re + +
+
+imported by: + json + +
+ +
+ +
+ + json.scanner +SourceModule
+imports: + _json + • json + • re + +
+
+imported by: + json + • json.decoder + +
+ +
+ +
+ + keyword +SourceModule
+imported by: + collections + • dataclasses + • inspect + • pc_agent.py + • typing_extensions + • win32com.client.build + +
+ +
+ +
+ + linecache +SourceModule
+imports: + functools + • os + • sys + • tokenize + +
+
+imported by: + asyncio.base_tasks + • inspect + • pc_agent.py + • traceback + • tracemalloc + • warnings + +
+ +
+ +
+ + locale +SourceModule
+imports: + _collections_abc + • _locale + • builtins + • encodings + • encodings.aliases + • functools + • os + • re + • sys + • warnings + +
+
+imported by: + _pydecimal + • _strptime + • calendar + • gettext + • pc_agent.py + • subprocess + +
+ +
+ + + +
+ + lzma +SourceModule
+imports: + _compression + • _lzma + • builtins + • io + • os + +
+
+imported by: + shutil + • tarfile + • zipfile + +
+ +
+ +
+ + marshal (builtin module)
+imported by: + importlib._bootstrap_external + • pkgutil + • zipimport + +
+ +
+ +
+ + math (builtin module) + +
+ +
+ + mimetypes +SourceModule
+imports: + _winapi + • getopt + • os + • posixpath + • sys + • urllib.parse + • winreg + +
+
+imported by: + urllib.request + • urllib3.fields + +
+ +
+ +
+ + mmap (builtin module) + +
+ +
+ + msvcrt (builtin module) + +
+ + + +
+ + multiprocessing.AuthenticationError +MissingModule
+imported by: + multiprocessing + • multiprocessing.connection + +
+ +
+ +
+ + multiprocessing.BufferTooShort +MissingModule
+imported by: + multiprocessing + • multiprocessing.connection + +
+ +
+ +
+ + multiprocessing.TimeoutError +MissingModule
+imported by: + multiprocessing + • multiprocessing.pool + +
+ +
+ + + + + +
+ + multiprocessing.dummy +Package
+imports: + array + • multiprocessing + • multiprocessing.dummy.connection + • multiprocessing.pool + • queue + • sys + • threading + • weakref + +
+ + +
+ +
+ + multiprocessing.dummy.connection +SourceModule
+imports: + multiprocessing.dummy + • queue + +
+
+imported by: + multiprocessing.dummy + +
+ +
+ + + + + +
+ + multiprocessing.get_start_method +MissingModule
+imported by: + multiprocessing + • multiprocessing.spawn + +
+ +
+ +
+ + multiprocessing.heap +SourceModule
+imports: + _winapi + • bisect + • collections + • mmap + • multiprocessing + • multiprocessing.context + • multiprocessing.util + • os + • sys + • tempfile + • threading + +
+ + +
+ + + + + + + + + + + +
+ + multiprocessing.popen_spawn_win32 +SourceModule
+imports: + _winapi + • msvcrt + • multiprocessing + • multiprocessing.context + • multiprocessing.spawn + • multiprocessing.util + • os + • signal + • sys + +
+
+imported by: + multiprocessing.context + +
+ +
+ + + +
+ + multiprocessing.queues +SourceModule + + +
+ +
+ + multiprocessing.reduction +SourceModule
+imports: + _winapi + • abc + • array + • copyreg + • functools + • io + • multiprocessing + • multiprocessing.context + • multiprocessing.resource_sharer + • os + • pickle + • socket + • sys + +
+
+imported by: + multiprocessing + • multiprocessing.context + +
+ +
+ + + + + +
+ + multiprocessing.set_start_method +MissingModule
+imported by: + multiprocessing + • multiprocessing.spawn + +
+ +
+ +
+ + multiprocessing.shared_memory +SourceModule
+imports: + _posixshmem + • _winapi + • errno + • functools + • mmap + • multiprocessing + • multiprocessing.resource_tracker + • os + • secrets + • struct + • types + +
+
+imported by: + multiprocessing + • multiprocessing.managers + +
+ +
+ + + + + + + + + +
+ + netrc +SourceModule
+imports: + os + • pwd + • stat + +
+
+imported by: + ftplib + • requests.utils + +
+ +
+ +
+ + nt (builtin module)
+imported by: + ctypes + • importlib._bootstrap_external + • ntpath + • os + • shutil + +
+ +
+ +
+ + ntpath +SourceModule
+imports: + _winapi + • genericpath + • nt + • os + • stat + • string + • sys + +
+
+imported by: + os + • os.path + • pathlib + • pc_agent.py + +
+ +
+ +
+ + nturl2path +SourceModule
+imports: + string + • urllib.parse + +
+
+imported by: + urllib.request + +
+ +
+ +
+ + numbers +SourceModule
+imports: + abc + +
+
+imported by: + _pydecimal + • fractions + • statistics + +
+ +
+ +
+ + opcode +SourceModule
+imports: + _opcode + +
+
+imported by: + dis + +
+ +
+ +
+ + operator +SourceModule
+imports: + _operator + • builtins + • functools + +
+
+imported by: + _pydatetime + • collections + • copyreg + • email._header_value_parser + • enum + • fractions + • gettext + • importlib.metadata + • importlib.resources.readers + • inspect + • pc_agent.py + • random + • statistics + • typing + • typing_extensions + +
+ +
+ +
+ + os +SourceModule
+imports: + _collections_abc + • abc + • io + • nt + • ntpath + • os.path + • posix + • posixpath + • stat + • subprocess + • sys + • warnings + +
+
+imported by: + argparse + • asyncio.base_events + • asyncio.coroutines + • asyncio.events + • asyncio.proactor_events + • asyncio.selector_events + • asyncio.unix_events + • asyncio.windows_utils + • bz2 + • certifi.core + • charset_normalizer.api + • concurrent.futures.process + • concurrent.futures.thread + • contextlib + • cryptography.hazmat.bindings.openssl.binding + • cryptography.hazmat.primitives.serialization.ssh + • cryptography.x509.base + • ctypes + • email.utils + • fnmatch + • genericpath + • getopt + • getpass + • gettext + • glob + • gzip + • http.cookiejar + • importlib.metadata + • importlib.resources._common + • importlib.resources._legacy + • importlib.resources.abc + • inspect + • linecache + • locale + • logging + • lzma + • mimetypes + • multiprocessing.connection + • multiprocessing.context + • multiprocessing.forkserver + • multiprocessing.heap + • multiprocessing.managers + • multiprocessing.pool + • multiprocessing.popen_fork + • multiprocessing.popen_forkserver + • multiprocessing.popen_spawn_posix + • multiprocessing.popen_spawn_win32 + • multiprocessing.process + • multiprocessing.queues + • multiprocessing.reduction + • multiprocessing.resource_sharer + • multiprocessing.resource_tracker + • multiprocessing.shared_memory + • multiprocessing.spawn + • multiprocessing.util + • netrc + • ntpath + • os.path + • pathlib + • pc_agent.py + • pkgutil + • platform + • posixpath + • py_compile + • pyi_rth_cryptography_openssl.py + • pyi_rth_inspect.py + • pyi_rth_pythoncom.py + • pyi_rth_pywintypes.py + • pywintypes + • random + • requests.auth + • requests.sessions + • requests.utils + • runpy + • shutil + • socket + • socks + • ssl + • subprocess + • tarfile + • tempfile + • threading + • urllib.request + • urllib3.connection + • urllib3.contrib.emscripten.connection + • urllib3.filepost + • urllib3.util.ssl_ + • win32com + • win32com.client.gencache + • win32com.client.genpy + • win32com.client.makepy + • xml.sax + • xml.sax.saxutils + • zipfile + +
+ +
+ +
+ + os.path +AliasNode
+imports: + ntpath + • os + +
+
+imported by: + os + • pkgutil + • py_compile + • requests.adapters + • tracemalloc + +
+ +
+ +
+ + pathlib +SourceModule
+imports: + _collections_abc + • errno + • fnmatch + • functools + • grp + • io + • ntpath + • os + • posixpath + • pwd + • re + • stat + • sys + • urllib.parse + • warnings + +
+ + +
+ +
+ + pickle +SourceModule
+imports: + _compat_pickle + • _pickle + • codecs + • copyreg + • functools + • io + • itertools + • pprint + • re + • struct + • sys + • types + +
+ + +
+ +
+ + pkgutil +SourceModule
+imports: + collections + • functools + • importlib + • importlib.machinery + • importlib.util + • inspect + • marshal + • os + • os.path + • re + • sys + • types + • warnings + • zipimport + +
+
+imported by: + pyi_rth_pkgutil.py + • runpy + +
+ +
+ +
+ + platform +SourceModule
+imports: + 'java.lang' + • _winreg + • _wmi + • collections + • functools + • itertools + • java + • os + • re + • socket + • struct + • subprocess + • sys + • vms_lib + • winreg + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + posix +MissingModule
+imports: + resource + +
+
+imported by: + importlib._bootstrap_external + • os + • posixpath + • shutil + +
+ +
+ +
+ + posixpath +SourceModule
+imports: + genericpath + • os + • posix + • pwd + • re + • stat + • sys + +
+
+imported by: + fnmatch + • importlib.metadata + • mimetypes + • os + • pathlib + • pc_agent.py + • zipfile._path + +
+ +
+ +
+ + pprint +SourceModule
+imports: + collections + • dataclasses + • io + • re + • sys + • types + +
+
+imported by: + pickle + +
+ +
+ +
+ + pwd +MissingModule
+imported by: + getpass + • netrc + • pathlib + • posixpath + • shutil + • subprocess + • tarfile + +
+ +
+ +
+ + py_compile +SourceModule
+imports: + argparse + • enum + • importlib._bootstrap_external + • importlib.machinery + • importlib.util + • os + • os.path + • sys + • traceback + +
+
+imported by: + zipfile + +
+ +
+ +
+ + pyexpat C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\pyexpat.pyd
+imported by: + xml.parsers.expat + +
+ +
+ +
+ + pyimod02_importers +MissingModule
+imported by: + pyi_rth_pkgutil.py + +
+ +
+ +
+ + pyodide +MissingModule
+imported by: + urllib3.contrib.emscripten.fetch + +
+ +
+ + + +
+ + pywin +Package
+imported by: + pywin.dialogs + • pywin.mfc + • win32com.client.makepy + +
+ +
+ +
+ + pywin.dialogs +Package
+imports: + pywin + • pywin.dialogs.status + +
+ + +
+ +
+ + pywin.dialogs.list +SourceModule
+imports: + commctrl + • pywin.dialogs + • pywin.mfc + • pywin.mfc.dialog + • win32api + • win32con + • win32ui + +
+
+imported by: + win32com.client.selecttlb + +
+ +
+ +
+ + pywin.dialogs.status +SourceModule
+imports: + pywin.dialogs + • pywin.mfc + • pywin.mfc.dialog + • pywin.mfc.thread + • threading + • time + • win32api + • win32con + • win32ui + +
+
+imported by: + pywin.dialogs + • win32com.client.makepy + +
+ +
+ +
+ + pywin.mfc +Package
+imports: + pywin + • pywin.mfc + • pywin.mfc.dialog + • pywin.mfc.object + • pywin.mfc.window + +
+ + +
+ +
+ + pywin.mfc.dialog +SourceModule
+imports: + pywin.mfc + • pywin.mfc.window + • win32con + • win32ui + +
+
+imported by: + pywin.dialogs.list + • pywin.dialogs.status + • pywin.mfc + +
+ +
+ +
+ + pywin.mfc.object +SourceModule
+imports: + pywin.mfc + • win32ui + +
+
+imported by: + pywin.mfc + • pywin.mfc.thread + • pywin.mfc.window + +
+ +
+ +
+ + pywin.mfc.thread +SourceModule
+imports: + pywin.mfc + • pywin.mfc.object + • win32ui + +
+
+imported by: + pywin.dialogs.status + +
+ +
+ +
+ + pywin.mfc.window +SourceModule
+imports: + pywin.mfc + • pywin.mfc.object + • win32con + • win32ui + +
+
+imported by: + pywin.mfc + • pywin.mfc.dialog + +
+ +
+ +
+ + pywin32_system32 +NamespacePackage
+imported by: + pywintypes + +
+ +
+ +
+ + pywintypes +SourceModule
+imports: + _win32sysloader + • importlib.machinery + • importlib.util + • os + • pywin32_system32 + • sys + +
+ + +
+ + + +
+ + quopri +SourceModule
+imports: + binascii + • getopt + • io + • sys + +
+
+imported by: + email.encoders + • email.message + • encodings.quopri_codec + +
+ +
+ +
+ + random +SourceModule
+imports: + _collections_abc + • _random + • _sha2 + • bisect + • hashlib + • itertools + • math + • operator + • os + • statistics + • time + • warnings + +
+ + +
+ +
+ + re +Package
+imports: + _sre + • copyreg + • enum + • functools + • re + • re._compiler + • re._constants + • re._parser + • warnings + +
+
+imported by: + _pydecimal + • _sre + • _strptime + • argparse + • ast + • base64 + • chardet.charsetprober + • chardet.universaldetector + • charset_normalizer.constant + • charset_normalizer.models + • charset_normalizer.utils + • cryptography.hazmat.primitives.serialization.ssh + • cryptography.x509.name + • csv + • dataclasses + • email._encoded_words + • email._header_value_parser + • email.feedparser + • email.generator + • email.header + • email.message + • email.policy + • email.quoprimime + • email.utils + • encodings.idna + • fnmatch + • fractions + • ftplib + • gettext + • glob + • http.client + • http.cookiejar + • http.cookies + • idna.core + • importlib.metadata + • importlib.metadata._adapters + • importlib.metadata._text + • inspect + • ipaddress + • json.decoder + • json.encoder + • json.scanner + • locale + • logging + • pathlib + • pc_agent.py + • pickle + • pkgutil + • platform + • posixpath + • pprint + • re + • re._casefix + • re._compiler + • re._constants + • re._parser + • requests._internal_utils + • requests.auth + • requests.utils + • sre_compile + • sre_constants + • sre_parse + • string + • tarfile + • textwrap + • tokenize + • typing + • urllib.parse + • urllib.request + • urllib3.connection + • urllib3.http2.connection + • urllib3.response + • urllib3.util.retry + • urllib3.util.ssl_match_hostname + • urllib3.util.url + • warnings + • wmi + • zipfile._path + • zipfile._path.glob + +
+ +
+ +
+ + re._casefix +SourceModule
+imports: + re + +
+
+imported by: + pc_agent.py + • re._compiler + +
+ +
+ +
+ + re._compiler +SourceModule
+imports: + _sre + • re + • re._casefix + • re._constants + • re._parser + • sys + +
+
+imported by: + pc_agent.py + • re + • sre_compile + +
+ +
+ +
+ + re._constants +SourceModule
+imports: + _sre + • re + +
+
+imported by: + pc_agent.py + • re + • re._compiler + • re._parser + • sre_constants + +
+ +
+ +
+ + re._parser +SourceModule
+imports: + re + • re._constants + • unicodedata + • warnings + +
+
+imported by: + pc_agent.py + • re + • re._compiler + • sre_parse + +
+ +
+ +
+ + reprlib +SourceModule
+imports: + _thread + • builtins + • itertools + +
+ + +
+ + + +
+ + requests.__version__ +SourceModule
+imports: + requests + +
+
+imported by: + requests + • requests.utils + +
+ +
+ +
+ + requests._internal_utils +SourceModule
+imports: + re + • requests + • requests.compat + +
+
+imported by: + requests.auth + • requests.cookies + • requests.models + • requests.sessions + • requests.utils + +
+ +
+ + + +
+ + requests.api +SourceModule
+imports: + requests + • requests.sessions + +
+
+imported by: + requests + +
+ +
+ +
+ + requests.auth +SourceModule
+imports: + base64 + • hashlib + • os + • re + • requests + • requests._internal_utils + • requests.compat + • requests.cookies + • requests.utils + • threading + • time + • warnings + +
+
+imported by: + requests.adapters + • requests.models + • requests.sessions + +
+ +
+ +
+ + requests.certs +SourceModule
+imports: + certifi + • requests + +
+
+imported by: + requests + • requests.utils + +
+ +
+ +
+ + requests.compat +SourceModule
+imports: + collections + • collections.abc + • http + • http.cookiejar + • http.cookies + • importlib + • io + • json + • requests + • simplejson + • sys + • urllib.parse + • urllib.request + • urllib3 + +
+ + +
+ +
+ + requests.cookies +SourceModule
+imports: + calendar + • copy + • dummy_threading + • requests + • requests._internal_utils + • requests.compat + • threading + • time + +
+ + +
+ +
+ + requests.exceptions +SourceModule
+imports: + requests + • requests.compat + • urllib3.exceptions + +
+
+imported by: + requests + • requests.adapters + • requests.models + • requests.sessions + • requests.utils + +
+ +
+ +
+ + requests.hooks +SourceModule
+imports: + requests + +
+
+imported by: + requests.models + • requests.sessions + +
+ +
+ + + +
+ + requests.packages +SourceModule
+imports: + requests + • requests.compat + • sys + +
+
+imported by: + requests + +
+ +
+ +
+ + requests.sessions +SourceModule +
+imported by: + requests + • requests.api + +
+ +
+ +
+ + requests.status_codes +SourceModule
+imports: + requests + • requests.structures + +
+
+imported by: + requests + • requests.models + • requests.sessions + +
+ +
+ +
+ + requests.structures +SourceModule
+imports: + collections + • requests + • requests.compat + +
+ + +
+ +
+ + requests.utils +SourceModule
+imports: + codecs + • collections + • contextlib + • io + • netrc + • os + • re + • requests + • requests.__version__ + • requests._internal_utils + • requests.certs + • requests.compat + • requests.cookies + • requests.exceptions + • requests.structures + • socket + • struct + • sys + • tempfile + • urllib3.util + • warnings + • winreg + • zipfile + +
+
+imported by: + requests + • requests.adapters + • requests.auth + • requests.models + • requests.sessions + +
+ +
+ +
+ + resource +MissingModule
+imported by: + posix + +
+ +
+ +
+ + runpy +SourceModule
+imports: + importlib.machinery + • importlib.util + • io + • os + • pkgutil + • sys + • warnings + +
+
+imported by: + multiprocessing.spawn + +
+ +
+ +
+ + secrets +SourceModule
+imports: + base64 + • hmac + • random + +
+
+imported by: + multiprocessing.shared_memory + +
+ +
+ +
+ + select C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\select.pyd
+imported by: + selectors + • subprocess + • urllib3.util.wait + +
+ +
+ +
+ + selectors +SourceModule
+imports: + abc + • collections + • collections.abc + • math + • select + • sys + +
+ + +
+ +
+ + shutil +SourceModule
+imports: + _winapi + • bz2 + • collections + • errno + • fnmatch + • grp + • lzma + • nt + • os + • posix + • pwd + • stat + • sys + • tarfile + • warnings + • zipfile + • zlib + +
+
+imported by: + argparse + • multiprocessing.util + • tarfile + • tempfile + • win32com.client.gencache + • zipfile + +
+ +
+ + + +
+ + simplejson +MissingModule
+imported by: + requests.compat + +
+ +
+ + + +
+ + socks +SourceModule
+imports: + base64 + • collections + • collections.Callable + • collections.abc + • errno + • functools + • io + • logging + • os + • socket + • struct + • sys + • win_inet_pton + +
+
+imported by: + urllib3.contrib.socks + +
+ +
+ +
+ + sre_compile +SourceModule
+imports: + re + • re._compiler + • warnings + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + sre_constants +SourceModule
+imports: + re + • re._constants + • warnings + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + sre_parse +SourceModule
+imports: + re + • re._parser + • warnings + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + ssl +SourceModule
+imports: + _ssl + • base64 + • calendar + • collections + • enum + • errno + • os + • socket + • sys + • time + • warnings + +
+ + +
+ +
+ + stat +SourceModule
+imports: + _stat + +
+
+imported by: + asyncio.base_events + • asyncio.unix_events + • genericpath + • glob + • netrc + • ntpath + • os + • pathlib + • pc_agent.py + • posixpath + • shutil + • tarfile + • zipfile + +
+ +
+ +
+ + statistics +SourceModule
+imports: + _statistics + • bisect + • collections + • decimal + • fractions + • functools + • itertools + • math + • numbers + • operator + • random + • sys + +
+
+imported by: + random + +
+ +
+ +
+ + string +SourceModule
+imports: + _string + • collections + • re + +
+ + +
+ +
+ + stringprep +SourceModule
+imports: + unicodedata + +
+
+imported by: + encodings.idna + +
+ +
+ +
+ + struct +SourceModule
+imports: + _struct + +
+ + +
+ +
+ + subprocess +SourceModule
+imports: + _posixsubprocess + • _winapi + • builtins + • contextlib + • errno + • fcntl + • grp + • io + • locale + • msvcrt + • os + • pwd + • select + • selectors + • signal + • sys + • threading + • time + • types + • warnings + +
+ + +
+ +
+ + sys (builtin module)
+imported by: + _collections_abc + • _compression + • _pydatetime + • _pydecimal + • argparse + • ast + • asyncio + • asyncio.base_events + • asyncio.coroutines + • asyncio.events + • asyncio.format_helpers + • asyncio.futures + • asyncio.streams + • asyncio.unix_events + • asyncio.windows_events + • asyncio.windows_utils + • base64 + • calendar + • certifi.core + • codecs + • collections + • concurrent.futures.process + • contextlib + • cryptography + • cryptography.hazmat.bindings.openssl.binding + • cryptography.utils + • cryptography.x509.name + • ctypes + • ctypes._endian + • dataclasses + • dis + • email._header_value_parser + • email.generator + • email.iterators + • email.policy + • encodings + • encodings.rot_13 + • encodings.utf_16 + • encodings.utf_32 + • enum + • fractions + • ftplib + • getopt + • getpass + • gettext + • glob + • gzip + • http.client + • importlib + • importlib._bootstrap_external + • importlib.metadata + • importlib.util + • inspect + • linecache + • locale + • logging + • mimetypes + • multiprocessing + • multiprocessing.connection + • multiprocessing.context + • multiprocessing.dummy + • multiprocessing.forkserver + • multiprocessing.heap + • multiprocessing.managers + • multiprocessing.popen_spawn_win32 + • multiprocessing.process + • multiprocessing.queues + • multiprocessing.reduction + • multiprocessing.resource_sharer + • multiprocessing.resource_tracker + • multiprocessing.spawn + • multiprocessing.synchronize + • multiprocessing.util + • ntpath + • os + • pathlib + • pc_agent.py + • pickle + • pkgutil + • platform + • posixpath + • pprint + • py_compile + • pyi_rth_cryptography_openssl.py + • pyi_rth_inspect.py + • pyi_rth_multiprocessing.py + • pyi_rth_pythoncom.py + • pyi_rth_pywintypes.py + • pywintypes + • quopri + • re._compiler + • requests.compat + • requests.packages + • requests.sessions + • requests.utils + • runpy + • selectors + • shutil + • socket + • socks + • ssl + • statistics + • subprocess + • tarfile + • tempfile + • threading + • tokenize + • traceback + • types + • typing + • typing_extensions + • urllib.request + • urllib3 + • urllib3.connection + • urllib3.connectionpool + • urllib3.response + • urllib3.util.ssl_ + • warnings + • weakref + • win32com + • win32com.client + • win32com.client.gencache + • win32com.client.genpy + • win32com.client.makepy + • win32com.server.exception + • win32com.server.policy + • win32traceutil + • wmi + • xml.parsers.expat + • xml.sax + • xml.sax.saxutils + • xmlrpc.client + • zipfile + • zipimport + +
+ +
+ +
+ + tarfile +SourceModule
+imports: + argparse + • builtins + • bz2 + • copy + • grp + • gzip + • io + • lzma + • os + • pwd + • re + • shutil + • stat + • struct + • sys + • time + • warnings + • zlib + +
+
+imported by: + shutil + +
+ +
+ +
+ + tempfile +SourceModule
+imports: + _thread + • errno + • functools + • io + • os + • random + • shutil + • sys + • types + • warnings + • weakref + +
+ + +
+ +
+ + termios +MissingModule
+imported by: + getpass + +
+ +
+ +
+ + textwrap +SourceModule
+imports: + re + +
+
+imported by: + argparse + • importlib.metadata + • importlib.metadata._adapters + • traceback + +
+ +
+ + + + + +
+ + token +SourceModule
+imported by: + inspect + • tokenize + +
+ +
+ +
+ + tokenize +SourceModule
+imports: + _tokenize + • argparse + • builtins + • codecs + • collections + • functools + • io + • itertools + • re + • sys + • token + +
+
+imported by: + importlib._bootstrap_external + • inspect + • linecache + +
+ +
+ + + +
+ + tracemalloc +SourceModule
+imports: + _tracemalloc + • collections.abc + • fnmatch + • functools + • linecache + • os.path + • pickle + +
+
+imported by: + warnings + +
+ +
+ + + +
+ + typing +SourceModule
+imports: + _typing + • abc + • collections + • collections.abc + • contextlib + • copyreg + • functools + • inspect + • operator + • re + • sys + • types + • warnings + +
+
+imported by: + asyncio.staggered + • asyncio.timeouts + • certifi.core + • chardet + • chardet.chardistribution + • chardet.charsetgroupprober + • chardet.charsetprober + • chardet.codingstatemachinedict + • chardet.escprober + • chardet.eucjpprober + • chardet.hebrewprober + • chardet.jpcntx + • chardet.latin1prober + • chardet.macromanprober + • chardet.mbcharsetprober + • chardet.resultdict + • chardet.sbcharsetprober + • chardet.sjisprober + • chardet.universaldetector + • chardet.utf1632prober + • chardet.utf8prober + • charset_normalizer.api + • charset_normalizer.cd + • charset_normalizer.legacy + • charset_normalizer.models + • charset_normalizer.utils + • cryptography.exceptions + • cryptography.hazmat.backends + • cryptography.hazmat.bindings.openssl.binding + • cryptography.hazmat.primitives.asymmetric.dsa + • cryptography.hazmat.primitives.asymmetric.ec + • cryptography.hazmat.primitives.asymmetric.rsa + • cryptography.hazmat.primitives.asymmetric.types + • cryptography.hazmat.primitives.ciphers.base + • cryptography.hazmat.primitives.serialization.ssh + • cryptography.utils + • cryptography.x509.base + • cryptography.x509.extensions + • cryptography.x509.general_name + • cryptography.x509.name + • cryptography.x509.verification + • functools + • idna.core + • idna.intranges + • idna.uts46data + • importlib.metadata + • importlib.metadata._meta + • importlib.resources._common + • importlib.resources._legacy + • importlib.resources.abc + • requests.adapters + • typing_extensions + • urllib3 + • urllib3._base_connection + • urllib3._collections + • urllib3._request_methods + • urllib3._version + • urllib3.connection + • urllib3.connectionpool + • urllib3.contrib.emscripten.connection + • urllib3.contrib.emscripten.fetch + • urllib3.contrib.emscripten.response + • urllib3.contrib.pyopenssl + • urllib3.contrib.socks + • urllib3.exceptions + • urllib3.fields + • urllib3.filepost + • urllib3.http2 + • urllib3.http2.connection + • urllib3.poolmanager + • urllib3.response + • urllib3.util.connection + • urllib3.util.proxy + • urllib3.util.request + • urllib3.util.retry + • urllib3.util.ssl_ + • urllib3.util.ssl_match_hostname + • urllib3.util.ssltransport + • urllib3.util.timeout + • urllib3.util.url + • urllib3.util.util + • win32com.client.gencache + • win32com.server.dispatcher + +
+ +
+ +
+ + typing_extensions +SourceModule
+imports: + _socket + • abc + • annotationlib + • asyncio.coroutines + • builtins + • collections + • collections.abc + • contextlib + • enum + • functools + • inspect + • io + • keyword + • operator + • sys + • types + • typing + • warnings + +
+ + +
+ +
+ + unicodedata C:\Users\User\AppData\Local\Programs\Python\Python312\DLLs\unicodedata.pyd
+imported by: + charset_normalizer.utils + • encodings.idna + • idna.core + • re._parser + • stringprep + • traceback + • urllib.parse + +
+ +
+ +
+ + urllib +Package + +
+ +
+ + urllib.error +SourceModule
+imports: + io + • urllib + • urllib.response + +
+
+imported by: + urllib.request + +
+ +
+ +
+ + urllib.parse +SourceModule
+imports: + collections + • functools + • ipaddress + • math + • re + • types + • unicodedata + • urllib + • warnings + +
+ + +
+ +
+ + urllib.request +SourceModule
+imports: + _scproxy + • base64 + • bisect + • contextlib + • email + • email.utils + • fnmatch + • ftplib + • getpass + • hashlib + • http.client + • http.cookiejar + • io + • ipaddress + • mimetypes + • nturl2path + • os + • re + • socket + • ssl + • string + • sys + • tempfile + • time + • urllib + • urllib.error + • urllib.parse + • urllib.response + • warnings + • winreg + +
+
+imported by: + http.cookiejar + • requests.compat + • xml.sax.saxutils + +
+ +
+ +
+ + urllib.response +SourceModule
+imports: + tempfile + • urllib + +
+
+imported by: + urllib.error + • urllib.request + +
+ +
+ + + + + +
+ + urllib3._collections +SourceModule
+imports: + __future__ + • collections + • enum + • threading + • typing + • typing_extensions + • urllib3 + +
+ + +
+ +
+ + urllib3._request_methods +SourceModule +
+imported by: + urllib3.connectionpool + • urllib3.poolmanager + +
+ +
+ +
+ + urllib3._version +SourceModule
+imports: + typing + • urllib3 + +
+
+imported by: + urllib3 + • urllib3.connection + +
+ +
+ + + + + +
+ + urllib3.contrib +Package
+imports: + urllib3 + • urllib3.contrib.pyopenssl + +
+ + +
+ + + + + + + + + + + +
+ + urllib3.contrib.pyopenssl +SourceModule +
+imported by: + requests + • urllib3.contrib + +
+ +
+ +
+ + urllib3.contrib.socks +SourceModule +
+imported by: + requests.adapters + +
+ +
+ + + +
+ + urllib3.fields +SourceModule
+imports: + __future__ + • email.utils + • mimetypes + • typing + • urllib3 + • warnings + +
+
+imported by: + requests.models + • urllib3.filepost + +
+ +
+ +
+ + urllib3.filepost +SourceModule
+imports: + __future__ + • binascii + • codecs + • io + • os + • typing + • urllib3 + • urllib3.fields + +
+
+imported by: + requests.models + • urllib3 + • urllib3._request_methods + +
+ +
+ + + +
+ + urllib3.http2.connection +SourceModule +
+imported by: + urllib3.http2 + +
+ +
+ +
+ + urllib3.http2.probe +SourceModule
+imports: + __future__ + • threading + • urllib3.http2 + +
+
+imported by: + urllib3.connection + • urllib3.http2 + +
+ +
+ + + + + + + + + +
+ + urllib3.util.proxy +SourceModule
+imports: + __future__ + • typing + • urllib3.connection + • urllib3.util + • urllib3.util.url + +
+
+imported by: + urllib3.connectionpool + • urllib3.poolmanager + +
+ +
+ +
+ + urllib3.util.request +SourceModule
+imports: + __future__ + • base64 + • brotli + • brotlicffi + • enum + • io + • typing + • urllib3.exceptions + • urllib3.util + • urllib3.util.util + • zstandard + +
+
+imported by: + urllib3 + • urllib3.connection + • urllib3.connectionpool + • urllib3.util + +
+ +
+ +
+ + urllib3.util.response +SourceModule
+imports: + __future__ + • email.errors + • http.client + • urllib3.exceptions + • urllib3.util + +
+
+imported by: + urllib3.connection + • urllib3.response + • urllib3.util + +
+ +
+ + + +
+ + urllib3.util.ssl_ +SourceModule
+imports: + __future__ + • binascii + • hashlib + • hmac + • os + • socket + • ssl + • sys + • typing + • urllib3.exceptions + • urllib3.util + • urllib3.util.ssltransport + • urllib3.util.url + • warnings + +
+ + +
+ +
+ + urllib3.util.ssl_match_hostname +SourceModule
+imports: + __future__ + • ipaddress + • re + • typing + • urllib3.util + • urllib3.util.ssl_ + +
+
+imported by: + urllib3.connection + • urllib3.connectionpool + +
+ +
+ +
+ + urllib3.util.ssltransport +SourceModule
+imports: + __future__ + • io + • socket + • ssl + • typing + • typing_extensions + • urllib3.exceptions + • urllib3.util + • urllib3.util.ssl_ + +
+
+imported by: + urllib3.connection + • urllib3.util.ssl_ + +
+ +
+ + + + + +
+ + urllib3.util.util +SourceModule
+imports: + __future__ + • types + • typing + • urllib3.util + +
+ + +
+ +
+ + urllib3.util.wait +SourceModule
+imports: + __future__ + • functools + • select + • socket + • urllib3.util + +
+
+imported by: + urllib3.connection + • urllib3.util + +
+ +
+ +
+ + vms_lib +MissingModule
+imported by: + platform + +
+ +
+ +
+ + warnings +SourceModule
+imports: + _warnings + • builtins + • linecache + • re + • sys + • traceback + • tracemalloc + +
+
+imported by: + _collections_abc + • _pydatetime + • argparse + • ast + • asyncio.base_events + • asyncio.base_subprocess + • asyncio.events + • asyncio.proactor_events + • asyncio.selector_events + • asyncio.sslproto + • asyncio.streams + • asyncio.tasks + • asyncio.unix_events + • asyncio.windows_utils + • calendar + • charset_normalizer.legacy + • cryptography + • cryptography.hazmat.bindings.openssl.binding + • cryptography.hazmat.primitives.serialization.ssh + • cryptography.utils + • cryptography.x509.base + • cryptography.x509.name + • email.utils + • enum + • getpass + • gettext + • gzip + • hmac + • http.cookiejar + • importlib + • importlib.abc + • importlib.metadata + • importlib.metadata._adapters + • importlib.resources._common + • importlib.resources._legacy + • locale + • logging + • multiprocessing.forkserver + • multiprocessing.pool + • multiprocessing.resource_tracker + • os + • pathlib + • pc_agent.py + • pkgutil + • random + • re + • re._parser + • requests + • requests.adapters + • requests.auth + • requests.utils + • runpy + • shutil + • sre_compile + • sre_constants + • sre_parse + • ssl + • subprocess + • tarfile + • tempfile + • threading + • typing + • typing_extensions + • urllib.parse + • urllib.request + • urllib3 + • urllib3.connection + • urllib3.connectionpool + • urllib3.contrib.socks + • urllib3.exceptions + • urllib3.fields + • urllib3.poolmanager + • urllib3.response + • urllib3.util.ssl_ + • winerror + • wmi + • zipfile + +
+ +
+ + + +
+ + win32api C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32\win32api.pyd + +
+ + + + + +
+ + win32com.client.CLSIDToClass +SourceModule
+imports: + __future__ + • win32com.client + +
+
+imported by: + win32com.client + • win32com.client.gencache + +
+ +
+ +
+ + win32com.client.build +SourceModule
+imports: + builtins + • datetime + • itertools + • keyword + • pythoncom + • pywintypes + • string + • win32com.client + • winerror + +
+ + +
+ +
+ + win32com.client.dynamic +SourceModule
+imports: + itertools + • pythoncom + • pywintypes + • traceback + • types + • win32com.client + • win32com.client.build + • win32com.client.util + • winerror + +
+
+imported by: + win32com.client + +
+ +
+ +
+ + win32com.client.gencache +SourceModule
+imports: + __future__ + • contextlib + • getopt + • glob + • importlib + • io + • os + • pickle + • pythoncom + • pywintypes + • shutil + • sys + • types + • typing + • win32com + • win32com.client + • win32com.client.CLSIDToClass + • win32com.client.genpy + • win32com.client.makepy + • win32event + • zipfile + +
+ + +
+ +
+ + win32com.client.genpy +SourceModule
+imports: + itertools + • os + • pythoncom + • sys + • time + • win32com.client + • win32com.client.build + • win32com.client.gencache + +
+ + +
+ +
+ + win32com.client.makepy +SourceModule +
+imported by: + win32com.client + • win32com.client.gencache + +
+ +
+ +
+ + win32com.client.selecttlb +SourceModule
+imports: + pythoncom + • pywin.dialogs.list + • win32api + • win32com.client + • win32con + +
+
+imported by: + win32com.client + • win32com.client.makepy + +
+ +
+ +
+ + win32com.client.util +SourceModule
+imports: + pythoncom + • win32com.client + +
+
+imported by: + win32com + • win32com.client + • win32com.client.dynamic + +
+ +
+ + + +
+ + win32com.server.dispatcher +SourceModule
+imports: + __future__ + • pythoncom + • traceback + • typing + • win32api + • win32com + • win32com.server + • win32com.server.exception + • win32com.util + • win32trace + • win32traceutil + +
+
+imported by: + win32com.server.util + +
+ +
+ +
+ + win32com.server.exception +SourceModule
+imports: + pythoncom + • sys + • win32com.server + +
+ + +
+ +
+ + win32com.server.policy +SourceModule
+imports: + pythoncom + • pywintypes + • sys + • types + • win32api + • win32com + • win32com.client + • win32com.server + • win32com.server.exception + • win32com.universal + • win32com.util + • win32con + • winerror + +
+
+imported by: + win32com.server + • win32com.server.util + +
+ +
+ +
+ + win32com.server.util +SourceModule +
+imported by: + win32com + +
+ +
+ +
+ + win32com.universal +SourceModule +
+imported by: + win32com + • win32com.server.policy + +
+ +
+ +
+ + win32com.util +SourceModule
+imports: + pythoncom + • win32api + • win32com + • win32con + +
+ + +
+ + + +
+ + win32event C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32\win32event.pyd
+imported by: + win32com.client.gencache + +
+ +
+ +
+ + win32trace C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\win32\win32trace.pyd
+imported by: + win32com.server.dispatcher + • win32traceutil + +
+ +
+ +
+ + win32traceutil +SourceModule
+imports: + sys + • win32api + • win32trace + +
+
+imported by: + win32com.server.dispatcher + +
+ +
+ +
+ + win32ui C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\Pythonwin\win32ui.pyd + +
+ +
+ + win_inet_pton +MissingModule
+imported by: + socks + +
+ +
+ +
+ + winerror +SourceModule
+imports: + warnings + +
+ + +
+ +
+ + winreg (builtin module)
+imported by: + importlib._bootstrap_external + • mimetypes + • platform + • requests.utils + • urllib.request + +
+ +
+ +
+ + wmi +SourceModule
+imports: + __future__ + • csv + • datetime + • pywintypes + • re + • struct + • sys + • warnings + • win32com.client + +
+
+imported by: + pc_agent.py + +
+ +
+ +
+ + xml +Package
+imports: + xml.sax.expatreader + • xml.sax.xmlreader + +
+
+imported by: + xml.parsers + • xml.sax + +
+ +
+ +
+ + xml.parsers +Package
+imports: + xml + • xml.parsers.expat + +
+
+imported by: + xml.parsers.expat + • xml.sax.expatreader + • xmlrpc.client + +
+ +
+ +
+ + xml.parsers.expat +SourceModule
+imports: + pyexpat + • sys + • xml.parsers + +
+
+imported by: + xml.parsers + • xml.sax.expatreader + • xmlrpc.client + +
+ +
+ +
+ + xml.sax +Package
+imports: + io + • os + • sys + • xml + • xml.sax + • xml.sax._exceptions + • xml.sax.expatreader + • xml.sax.handler + • xml.sax.saxutils + • xml.sax.xmlreader + +
+ + +
+ +
+ + xml.sax._exceptions +SourceModule
+imports: + xml.sax + +
+
+imported by: + xml.sax + • xml.sax.expatreader + • xml.sax.xmlreader + +
+ +
+ +
+ + xml.sax.expatreader +SourceModule +
+imported by: + xml + • xml.sax + +
+ +
+ +
+ + xml.sax.handler +SourceModule
+imports: + xml.sax + +
+
+imported by: + xml.sax + • xml.sax.expatreader + • xml.sax.saxutils + • xml.sax.xmlreader + +
+ +
+ +
+ + xml.sax.saxutils +SourceModule
+imports: + codecs + • io + • os + • sys + • urllib.parse + • urllib.request + • xml.sax + • xml.sax.handler + • xml.sax.xmlreader + +
+
+imported by: + xml.sax + • xml.sax.expatreader + • xml.sax.xmlreader + +
+ +
+ +
+ + xml.sax.xmlreader +SourceModule
+imports: + xml.sax + • xml.sax._exceptions + • xml.sax.handler + • xml.sax.saxutils + +
+
+imported by: + xml + • xml.sax + • xml.sax.expatreader + • xml.sax.saxutils + +
+ +
+ +
+ + xmlrpc +Package
+imported by: + xmlrpc.client + +
+ +
+ +
+ + xmlrpc.client +SourceModule
+imports: + base64 + • datetime + • decimal + • errno + • gzip + • http.client + • io + • sys + • time + • urllib.parse + • xml.parsers + • xml.parsers.expat + • xmlrpc + +
+
+imported by: + multiprocessing.connection + +
+ +
+ +
+ + zipfile +Package
+imports: + argparse + • binascii + • bz2 + • importlib.util + • io + • lzma + • os + • py_compile + • shutil + • stat + • struct + • sys + • threading + • time + • warnings + • zipfile._path + • zlib + +
+ + +
+ +
+ + zipfile._path +Package
+imports: + contextlib + • io + • itertools + • pathlib + • posixpath + • re + • zipfile + • zipfile._path.glob + +
+
+imported by: + zipfile + • zipfile._path.glob + +
+ +
+ +
+ + zipfile._path.glob +SourceModule
+imports: + re + • zipfile._path + +
+
+imported by: + zipfile._path + +
+ +
+ +
+ + zipimport +SourceModule
+imports: + _frozen_importlib + • _frozen_importlib_external + • _imp + • _io + • _warnings + • importlib.readers + • marshal + • sys + • time + • zlib + +
+
+imported by: + pkgutil + +
+ +
+ +
+ + zlib (builtin module)
+imported by: + encodings.zlib_codec + • gzip + • shutil + • tarfile + • urllib3.response + • zipfile + • zipimport + +
+ +
+ +
+ + zstandard +MissingModule
+imported by: + urllib3.response + • urllib3.util.request + +
+ +
+ + + diff --git a/create_db.js b/create_db.js deleted file mode 100644 index f045a75..0000000 --- a/create_db.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as XLSX from 'xlsx'; - -const hwTabs = ['개인PC', '서버', '스토리지', '전산비품']; -const swTabs = ['구독SW', '영구SW']; - -const hwHeaders = ['법인', '자산코드', '명칭', '위치', '관리자', 'IP주소', 'MACaddress', 'HW사양', 'OS']; -const swHeaders = ['법인', 'SW명', '라이선스키', '할당자', '사용기간', '비고']; - -const wb = XLSX.utils.book_new(); - -hwTabs.forEach((tab, i) => { - const wsData = [hwHeaders, [`(주)회사${i}`, `ASSET-${i}00`, `${tab} 모델A`, '본사 1층', '관리자A', '192.168.0.1', '00:00:00:00:00:01', 'Core i7, 16GB RAM', 'Windows 10']]; - const ws = XLSX.utils.aoa_to_sheet(wsData); - XLSX.utils.book_append_sheet(wb, ws, tab); -}); - -swTabs.forEach((tab, i) => { - const wsData = [swHeaders, [`(주)회사${i}`, `${tab} Adobe CC`, '1234-5678-ABCD', '홍길동,김철수', '2024.01~2024.12', '본사 전용']]; - const ws = XLSX.utils.aoa_to_sheet(wsData); - XLSX.utils.book_append_sheet(wb, ws, tab); -}); - -XLSX.writeFile(wb, 'temp_db.xlsx'); -console.log('temp_db.xlsx created!'); diff --git a/db_fix_data.js b/db_fix_data.js deleted file mode 100644 index 92fb2b4..0000000 --- a/db_fix_data.js +++ /dev/null @@ -1,49 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; - -async function migrateData() { - const connection = await mysql.createConnection({ - host: DB_HOST, - user: DB_USER, - password: DB_PASS, - database: DB_NAME, - port: parseInt(DB_PORT || '3306') - }); - - console.log('🔄 기존 데이터 보정 시작 (상세유형 = 유형)...'); - - const tables = ['pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets']; - - for (const table of tables) { - // 1. 유형(type)이 비어있는 경우 기본값 채우기 (보정 전 단계) - let defaultType = '기타'; - if (table === 'server_assets') defaultType = '서버'; - else if (table === 'pc_assets') defaultType = '개인PC'; - else if (table === 'storage_assets') defaultType = '스토리지'; - else if (table === 'equip_assets') defaultType = '전산비품'; - else if (table === 'mobile_assets') defaultType = '모바일기기'; - - await connection.query(`UPDATE ${table} SET type = ? WHERE type IS NULL OR type = ''`, [defaultType]); - - // 2. 개인PC가 아닌 데이터들에 대해 상세유형 = 유형 업데이트 - const [result] = await connection.query(` - UPDATE ${table} - SET detail_purpose = type - WHERE type NOT IN ('개인PC', 'PC') - `); - - console.log(`✅ ${table}: ${result.affectedRows}개 데이터 보정 완료`); - } - - console.log('✨ 모든 기존 데이터 보정이 완료되었습니다.'); - await connection.end(); -} - -migrateData().catch(err => { - console.error('❌ 데이터 보정 실패:', err); - process.exit(1); -}); diff --git a/debug_excel.json b/debug_excel.json deleted file mode 100644 index f98fe15..0000000 --- a/debug_excel.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "서버 관리대장(기술개발센터).xlsx": [ - [ - "마천사무실" - ], - [ - "실사진", - "구성", - "자산번호", - "명칭(주기)", - "상세", - "유형", - "담당자", - null, - "IP", - "원격접속", - null, - null, - "모델명", - "OS", - "CPU", - "RAM", - "GPU", - "Storage1", - "Storage2", - "Storage3" - ], - [ - null, - null, - null, - null, - null, - null, - "정", - "부", - null, - "접속도구", - "아이디", - "비밀번호" - ], - [ - null, - null, - "", - "GSIM NAS", - "팀 내부 자료 저장 , 정사영상 및 지도 데이터 저장 , Gitea 및 Git 내장 NAS", - "NAS", - null, - null, - null, - null, - null, - null, - "Synology DS923+" - ], - [ - null, - null, - "", - "그래픽스개발팀\r\n데이터 백업 NAS", - "그래픽스 개발팀 데이터 백업용 NAS", - "NAS", - null, - null, - null, - null, - null, - null, - "Synology DS923+" - ] - ], - "서버 관리대장(한맥빌딩).xlsx": [ - [ - "한맥빌딩(MDF 실)" - ], - [ - "실사진", - "구성", - null, - null, - null, - null, - null, - null, - null, - "서버번호", - "명칭(주기)", - "유형", - "IP", - "모델명", - "용도", - "담당자", - "OS", - "CPU", - "RAM", - "GPU", - "Storage1", - "Storage2", - "Storage3" - ], - [], - [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - 1, - "NAS 2", - "NAS", - "192.168.9.23", - "DS414j", - "한라 기업부설연구소 공용 NAS", - "이준하 차장" - ], - [ - null, - null, - "NAS2", - "NAS 1\r\n(DS224+)", - "NAS4", - "NAS 5\r\n(DS923+)", - "NAS 6\r\n(DS923+)", - null, - null, - 2, - "NAS 1", - "NAS", - "192.168.9.32", - "DS224+", - "한라 사업지원, 경영지원, 업무, 안전품질, 운영 공용 NAS", - "이준하 차장" - ] - ] -} \ No newline at end of file diff --git a/expand_pc_schema.js b/expand_pc_schema.js deleted file mode 100644 index 28fac2c..0000000 --- a/expand_pc_schema.js +++ /dev/null @@ -1,52 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; - -dotenv.config(); - -async function expandSchema() { - const connection = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - port: parseInt(process.env.DB_PORT || '3306') - }); - - try { - console.log('🏗️ Expanding asset_pc table schema...'); - - const columnsToAdd = [ - { name: 'location', type: 'TEXT' }, - { name: 'location_detail', type: 'TEXT' }, - { name: 'ip_address', type: 'TEXT' }, - { name: 'ip_address_2', type: 'TEXT' }, - { name: 'remote_tool', type: 'TEXT' }, - { name: 'remote_id', type: 'TEXT' }, - { name: 'remote_pw', type: 'TEXT' }, - { name: 'monitoring', type: 'TEXT' }, - { name: 'asset_purpose', type: 'TEXT' } - ]; - - for (const col of columnsToAdd) { - try { - await connection.query(`ALTER TABLE asset_pc ADD COLUMN \`${col.name}\` ${col.type}`); - console.log(`✅ Added column: ${col.name}`); - } catch (err) { - if (err.code === 'ER_DUP_COLUMN_NAME') { - console.log(`ℹ️ Column ${col.name} already exists.`); - } else { - throw err; - } - } - } - - console.log('🎉 Schema expansion completed!'); - - } catch (err) { - console.error('❌ Schema expansion failed:', err); - } finally { - await connection.end(); - } -} - -expandSchema(); diff --git a/migrate_server_pc.js b/migrate_server_pc.js deleted file mode 100644 index 60d64a5..0000000 --- a/migrate_server_pc.js +++ /dev/null @@ -1,81 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; - -dotenv.config(); - -async function migrate() { - const connection = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - port: parseInt(process.env.DB_PORT || '3306') - }); - - try { - console.log('🚀 ' + 'Starting migration: asset_server (서버PC) -> asset_pc'); - - // 1. 서버PC 데이터 조회 - const [serverPcs] = await connection.query( - "SELECT * FROM asset_server WHERE asset_type = '서버PC'" - ); - - if (serverPcs.length === 0) { - console.log('✅ ' + 'No ServerPC assets found in asset_server table.'); - return; - } - - console.log(`📦 Found ${serverPcs.length} ServerPC assets to migrate.`); - - // 2. asset_pc 컬럼 정보 조회 - const [pcColumnsRows] = await connection.query('DESCRIBE asset_pc'); - const pcColumns = pcColumnsRows.map(r => r.Field); - console.log('📋 Target columns:', pcColumns); - - // 3. asset_pc 테이블로 이동 (category를 'PC'로 변경) - for (const asset of serverPcs) { - const dataToInsert = {}; - - // 공통 컬럼 매핑 - pcColumns.forEach(col => { - if (col === 'category') { - dataToInsert[col] = 'PC'; - } else if (asset.hasOwnProperty(col)) { - dataToInsert[col] = asset[col]; - } - }); - - // 특수한 매핑 (예: model_name -> asset_pc에 컬럼이 없다면 memo에 추가하거나 무시) - // 현재 asset_pc에는 model_name이 없으므로 memo에 보존하는 것이 안전함 - if (asset.model_name) { - const currentMemo = dataToInsert.memo || ''; - dataToInsert.memo = `[모델명: ${asset.model_name}] ${currentMemo}`.trim(); - } - - const columns = Object.keys(dataToInsert).map(col => `\`${col}\``).join(', '); - const placeholders = Object.keys(dataToInsert).map(() => '?').join(', '); - const values = Object.values(dataToInsert); - - await connection.query( - `INSERT INTO asset_pc (${columns}) VALUES (${placeholders})`, - values - ); - console.log(` - Migrated: ${asset.asset_code || asset.id}`); - } - - // 4. asset_server 테이블에서 삭제 - const [deleteResult] = await connection.query( - "DELETE FROM asset_server WHERE asset_type = '서버PC'" - ); - console.log(`🗑️ Deleted ${deleteResult.affectedRows} records from asset_server.`); - - console.log('🎉 Migration completed successfully!'); - - } catch (err) { - console.error('❌ Migration failed:', err); - } finally { - await connection.end(); - } -} - -migrate(); diff --git a/migrate_to_korean.js b/migrate_to_korean.js deleted file mode 100644 index 1fa3968..0000000 --- a/migrate_to_korean.js +++ /dev/null @@ -1,77 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; - -dotenv.config(); - -const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; - -// 영문 -> 한글 필드 매핑 테이블 -const FIELD_MAPPING = { - corp: '법인', - asset_code: '자산코드', - type: '유형', - purpose: '용도', - detail_purpose: '상세용도', - details: '상세', - current_org: '현사용조직', - prev_org: '이전사용조직', - location: '위치', - manager_main: '담당자_정', - manager_sub: '담당자_부', - ip_address: 'IP주소', - remote_tool: '원격접속', - server_id: '서버ID', - server_pw: '서버PW', - model_name: '모델명', - os: 'OS', - cpu: 'CPU', - ram: 'RAM', - storage1: 'SSD1', - storage2: 'SSD2', - status: '상태' -}; - -async function migrateData() { - const connection = await mysql.createConnection({ - host: DB_HOST, - user: DB_USER, - password: DB_PASS, - database: DB_NAME, - port: parseInt(DB_PORT || '3306') - }); - - console.log('🔄 데이터 필드 영문 -> 한글 마이그레이션 시작...'); - - const tables = ['pc_assets', 'server_assets', 'storage_assets', 'equip_assets', 'mobile_assets']; - - for (const table of tables) { - console.log(`📦 ${table} 처리 중...`); - const [rows] = await connection.query(`SELECT * FROM ${table}`); - - for (const row of rows) { - const updatedRow = { ...row }; - // 영문 키의 값을 한글 키로 복사 - Object.entries(FIELD_MAPPING).forEach(([eng, kor]) => { - if (row[eng] !== undefined && row[eng] !== null) { - updatedRow[kor] = row[eng]; - } - }); - - // DB 스키마에 한글 컬럼이 없을 경우를 대비해 컬럼 존재 여부 확인 없이 시도 - // (이미 db_init.js가 한글 컬럼을 생성했을 가능성 확인 필요) - try { - await connection.query(`UPDATE ${table} SET ? WHERE id = ?`, [updatedRow, row.id]); - } catch (err) { - // 컬럼이 없어서 실패하는 경우 무시 (나중에 수동 추가) - } - } - } - - console.log('✨ 마이그레이션 완료.'); - await connection.end(); -} - -migrateData().catch(err => { - console.error('❌ 마이그레이션 실패:', err); - process.exit(1); -}); diff --git a/pc_agent.py b/pc_agent.py new file mode 100644 index 0000000..ecd2f9d --- /dev/null +++ b/pc_agent.py @@ -0,0 +1,134 @@ +import wmi +import requests +import json +import socket +import platform +import sys +import time + +def collect_specs(): + try: + c = wmi.WMI() + computer = c.Win32_ComputerSystem()[0] + os_info = c.Win32_OperatingSystem()[0] + proc = c.Win32_Processor()[0] + board = c.Win32_BaseBoard()[0] + + # 1. 상세 GPU 정보 수집 (모든 그래픽 카드) + gpu_list = [] + for g in c.Win32_VideoController(): + gpu_list.append(g.Name) + gpu_info = ", ".join(gpu_list) if gpu_list else "N/A" + + # 2. 모든 저장장치 정보 수집 및 SSD/HDD 구분 + storage_list = [] + + # Windows 8 이상에서 작동하는 상세 저장소 정보 수집 시도 + physical_disks = {} + try: + storage_c = wmi.WMI(namespace="Root\\Microsoft\\Windows\\Storage") + for d in storage_c.MSFT_PhysicalDisk(): + # MediaType: 3(HDD), 4(SSD), 0(Unspecified) + physical_disks[d.DeviceId] = d.MediaType + except: + pass + + for d in c.Win32_DiskDrive(): + size_gb = round(float(d.Size) / (1024**3)) if d.Size else 0 + + # 미디어 타입 판단 + media_type = physical_disks.get(str(d.Index), 0) + prefix = "" + if media_type == 4: + prefix = "[SSD] " + elif media_type == 3: + prefix = "[HDD] " + else: + # 힌트가 없을 경우 모델명으로 추측 + cap = d.Caption.upper() + if "SSD" in cap or "NVME" in cap or "FLASH" in cap: + prefix = "[SSD] " + else: + prefix = "[HDD] " + + storage_list.append(f"{prefix}{d.Caption} ({size_gb}GB)") + + # DB 필드(SSD1, SSD2, SSD3)에 나눠 담기 + storage1 = storage_list[0] if len(storage_list) > 0 else "N/A" + storage2 = storage_list[1] if len(storage_list) > 1 else "" + storage3 = storage_list[2] if len(storage_list) > 2 else "" + + # 실시간 데이터 추출 + specs = { + "메인보드": f"{board.Manufacturer} {board.Product}".strip(), + "CPU": proc.Name.strip(), + "RAM": f"{round(float(computer.TotalPhysicalMemory) / (1024**3))}GB", + "OS": os_info.Caption, + "GPU": gpu_info, + "SSD1": storage1, + "SSD2": storage2, + "SSD3": storage3, + "비고": "실시간 에이전트(EXE) 자동 수집" + } + return specs + except Exception as e: + print(f"데이터 수집 중 오류 발생: {e}") + return None + +def send_data(specs, server_url, asset_code): + try: + # 전송 데이터에 자산코드 추가 (식별용) + specs["자산코드"] = asset_code + print(f"\n📡 서버로 전송 중... ({server_url})") + response = requests.post(server_url, json=specs, timeout=10) + if response.status_code == 200: + print("✅ 전송 성공! ITAM 시스템에서 확인하세요.") + else: + print(f"❌ 전송 실패: 서버 응답 코드 {response.status_code}") + except Exception as e: + print(f"❌ 서버 연결 오류: {e}") + print("서버가 켜져 있는지, URL이 맞는지 확인해주세요.") + +if __name__ == "__main__": + print("========================================") + print(" ITAM PC 실시간 사양 수집 에이전트 (v1.1)") + print("========================================\n") + + # 1. 정보 수집 + print("🔍 하드웨어 정보를 읽어오는 중...") + data = collect_specs() + + if data: + print("\n[수집된 실제 사양]") + display_map = { + "메인보드": "메인보드", + "CPU": "CPU", + "RAM": "RAM", + "OS": "OS", + "GPU": "GPU", + "SSD1": "Storage 1", + "SSD2": "Storage 2", + "SSD3": "Storage 3", + "비고": "비고" + } + for key, value in data.items(): + if value: # 값이 있는 경우만 표시 + label = display_map.get(key, key) + print(f" - {label}: {value}") + + print("\n" + "="*40) + asset_code = input("등록할 자산번호를 입력하세요 (예: PC-001): ").strip() + if not asset_code: + print("❌ 자산번호 없이는 전송할 수 없습니다.") + else: + server_ip = input("서버 IP를 입력하세요 (기본값 localhost): ").strip() + if not server_ip: server_ip = "localhost" + + target_url = f"http://{server_ip}:3000/api/agent/collect" + + confirm = input("\n위 정보를 서버로 전송할까요? (y/n): ") + if confirm.lower() == 'y': + send_data(data, target_url, asset_code) + + print("\n5초 후 프로그램이 종료됩니다...") + time.sleep(5) diff --git a/pc_agent.spec b/pc_agent.spec new file mode 100644 index 0000000..5a22678 --- /dev/null +++ b/pc_agent.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['pc_agent.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='pc_agent', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/restore_db.js b/restore_db.js deleted file mode 100644 index 303fb5a..0000000 --- a/restore_db.js +++ /dev/null @@ -1,91 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; -import fs from 'fs'; - -dotenv.config(); - -const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; - -async function restoreDB() { - const connection = await mysql.createConnection({ - host: DB_HOST, - user: DB_USER, - password: DB_PASS, - database: DB_NAME, - port: parseInt(DB_PORT || '3306') - }); - - console.log('📖 백업 파일 읽는 중...'); - const rawData = fs.readFileSync('backup_atam_data.json', 'utf8'); - const data = JSON.parse(rawData); - - const tables = { - pc_assets: data.pc_assets || [], - server_assets: data.server_assets || [], - storage_assets: data.storage_assets || [], - equip_assets: data.equip_assets || [], - mobile_assets: data.mobile_assets || [], - sw_sub_assets: data.sw_sub_assets || [], - sw_perm_assets: data.sw_perm_assets || [], - cloud_assets: data.cloud_assets || [], - sw_users: data.sw_users || [], - asset_logs: data.logs || [] - }; - - console.log('🚀 데이터 복구 시작...'); - - for (const [tableName, rows] of Object.entries(tables)) { - if (rows.length === 0) { - console.log(`⏩ ${tableName}: 데이터 없음, 건너뜀`); - continue; - } - - console.log(`📦 ${tableName} 복구 중 (${rows.length}개)...`); - - // 테이블 컬럼 정보 조회 - const [columns] = await connection.query(`SHOW COLUMNS FROM ${tableName}`); - const validColumns = columns.map(c => c.Field); - - for (const row of rows) { - const filteredRow = {}; - Object.keys(row).forEach(key => { - let dbKey = key; - - // 필드명 매핑 보정 (백업 데이터 -> DB 스키마) - if (key === 'manager') dbKey = 'manager_main'; - if (key === 'asset_name' && (tableName === 'mobile_assets' || tableName === 'equip_assets')) dbKey = 'model_name'; - if (key === 'mac_address' && tableName === 'pc_assets') dbKey = 'remarks'; // 스키마에 없는 경우 비고로 - - // created_at 등 날짜 포맷 보정 - if (validColumns.includes(dbKey)) { - let value = row[key]; - if (dbKey === 'created_at' && value) { - // '2026-04-17T08:52:11.000Z' -> '2026-04-17 08:52:11' - value = value.replace('T', ' ').replace(/\..*$/, ''); - } - filteredRow[dbKey] = value; - } - }); - - // 필수값 ID 확인 - if (!filteredRow.id) { - filteredRow.id = Math.random().toString(36).substr(2, 9); - } - - try { - await connection.query(`INSERT INTO ${tableName} SET ?`, filteredRow); - } catch (err) { - console.error(`❌ [${tableName}] ID ${filteredRow.id} 삽입 실패: ${err.message}`); - } - } - console.log(`✅ ${tableName} 완료`); - } - - console.log('✨ 모든 데이터 복구가 완료되었습니다.'); - await connection.end(); -} - -restoreDB().catch(err => { - console.error('❌ 복구 실패:', err); - process.exit(1); -}); diff --git a/restore_final.js b/restore_final.js deleted file mode 100644 index 28ad62e..0000000 --- a/restore_final.js +++ /dev/null @@ -1,63 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; -import fs from 'fs'; -import path from 'path'; - -dotenv.config(); - -const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; - -async function restoreFinal() { - const connection = await mysql.createConnection({ - host: DB_HOST, - user: DB_USER, - password: DB_PASS, - database: DB_NAME, - port: parseInt(DB_PORT || '3306') - }); - - console.log('📖 realServerData.ts 읽는 중...'); - const filePath = path.join(process.cwd(), 'src/core/realServerData.ts'); - const fileContent = fs.readFileSync(filePath, 'utf8'); - - const jsonMatch = fileContent.match(/\[\s*\{[\s\S]*\}\s*\]/); - const realData = JSON.parse(jsonMatch[0]); - - console.log(`🚀 ${realData.length}개의 실제 데이터 복구 시작 (한글 필드 기준)...`); - - for (const item of realData) { - const type = item.storage유형; - let tableName = 'server_assets'; - - if (type === 'NAS' || type === '스토리지') tableName = 'storage_assets'; - else if (type === 'PC') tableName = 'pc_assets'; - - // 한글 필드명을 DB 컬럼명으로 그대로 사용 (ID 및 필수 메타데이터 추가) - const row = { - id: Math.random().toString(36).substr(2, 9), - ...item, - // mapping corrections for DB schema - 유형: type, - 용도: item.용도 || '', - 상세: item.상세 || '', - 위치: item.위치 || '' - }; - - // delete unnecessary key - delete row.storage유형; - - try { - await connection.query(`INSERT INTO ${tableName} SET ?`, row); - } catch (err) { - // console.error(`❌ 삽입 실패:`, err.message); - } - } - - console.log('✨ 모든 디자인 및 데이터 복구가 완료되었습니다.'); - await connection.end(); -} - -restoreFinal().catch(err => { - console.error('❌ 복구 실패:', err); - process.exit(1); -}); diff --git a/restore_real_data.js b/restore_real_data.js deleted file mode 100644 index c822bb3..0000000 --- a/restore_real_data.js +++ /dev/null @@ -1,83 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; -import fs from 'fs'; -import path from 'path'; - -dotenv.config(); - -const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; - -async function restoreRealData() { - const connection = await mysql.createConnection({ - host: DB_HOST, - user: DB_USER, - password: DB_PASS, - database: DB_NAME, - port: parseInt(DB_PORT || '3306') - }); - - console.log('📖 realServerData.ts 읽는 중...'); - const filePath = path.join(process.cwd(), 'src/core/realServerData.ts'); - const fileContent = fs.readFileSync(filePath, 'utf8'); - - // TypeScript 파일에서 JSON 배열 부분만 추출 - const jsonMatch = fileContent.match(/\[\s*\{[\s\S]*\}\s*\]/); - if (!jsonMatch) { - throw new Error('데이터 형식을 찾을 수 없습니다.'); - } - const realData = JSON.parse(jsonMatch[0]); - - console.log(`🚀 ${realData.length}개의 실제 데이터 복구 시작...`); - - for (const item of realData) { - const type = item.storage유형; - let tableName = 'server_assets'; - - // 유형에 따른 테이블 분기 - if (type === 'NAS' || type === '스토리지') { - tableName = 'storage_assets'; - } else if (type === 'PC' && item.용도.includes('서버')) { - tableName = 'server_assets'; // 서버 역할을 하는 PC - } else if (type === 'PC') { - tableName = 'pc_assets'; - } - - // DB 스키마 매핑 - const filteredRow = { - id: Math.random().toString(36).substr(2, 9), - corp: item.법인 || '', - asset_code: item.자산코드 || '', - type: type === 'NAS' ? '스토리지' : (type === 'PC' ? '서버(PC)' : type), - purpose: item.용도 || '', - details: item.상세 || '', - location: item.위치 || '', - manager_main: item.담당자_정 || '', - manager_sub: item.담당자_부 || '', - ip_address: item.IP주소 || '', - remote_tool: item.원격접속 || '', - server_id: item.서버ID || '', - server_pw: item.서버PW || '', - model_name: item.모델명 || '', - os: item.OS || '', - cpu: item.CPU || '', - ram: item.RAM || '', - storage1: item.SSD1 || '', - storage2: item.SSD2 || '', - remarks: item.IP2 ? `보조IP: ${item.IP2}` : '' - }; - - try { - await connection.query(`INSERT INTO ${tableName} SET ?`, filteredRow); - } catch (err) { - console.error(`❌ [${tableName}] 삽입 실패 (${item.자산코드}):`, err.message); - } - } - - console.log('✨ 실제 운영 데이터 복구가 완료되었습니다.'); - await connection.end(); -} - -restoreRealData().catch(err => { - console.error('❌ 복구 실패:', err); - process.exit(1); -}); diff --git a/restore_server_pc_data.js b/restore_server_pc_data.js deleted file mode 100644 index 94c482c..0000000 --- a/restore_server_pc_data.js +++ /dev/null @@ -1,83 +0,0 @@ -import mysql from 'mysql2/promise'; -import dotenv from 'dotenv'; -import xlsx from 'xlsx'; - -dotenv.config(); - -async function restoreData() { - const connection = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - port: parseInt(process.env.DB_PORT || '3306') - }); - - try { - console.log('🔄 Restoring ServerPC metadata (Final Attempt)...'); - - // 1. Excel 로드 - const workbook = xlsx.readFile('server_db.xlsx'); - const sheetName = workbook.SheetNames[0]; - const excelRows = xlsx.utils.sheet_to_json(workbook.Sheets[sheetName]); - - // 2. DB에서 현재 서버PC 데이터 로드 - const [dbAssets] = await connection.query( - "SELECT id, memo, asset_code FROM asset_pc WHERE asset_type = '서버PC'" - ); - - console.log(`📊 DB: ${dbAssets.length} assets, Excel: ${excelRows.length} rows.`); - - for (const asset of dbAssets) { - // 메모에서 "서버코드 : [ID]" 패턴 추출 - // 인코딩 문제로 깨져 보일 수 있으므로 유연하게 매칭 ( jh-idc-001 패턴 찾기 ) - const memo = asset.memo || ''; - const match = memo.match(/[a-z]+-idc-[0-9]+/i); - const serverCode = match ? match[0] : null; - - if (!serverCode) { - console.log(` ❓ Could not find server code in memo for asset ${asset.asset_code}`); - continue; - } - - // Excel에서 해당 서버코드 찾기 (memo 필드 안에 포함되어 있음) - const matchedExcelRow = excelRows.find(r => - r.memo && r.memo.includes(serverCode) - ); - - if (matchedExcelRow) { - const updateData = { - location: matchedExcelRow.location, - location_detail: matchedExcelRow.location_detail, - ip_address: matchedExcelRow.ip_address, - ip_address_2: matchedExcelRow.ip_address_2, - remote_tool: matchedExcelRow.remote_tool, - remote_id: matchedExcelRow.remote_id, - remote_pw: matchedExcelRow.remote_pw, - monitoring: matchedExcelRow.monitoring, - asset_purpose: matchedExcelRow.asset_purpose - }; - - const setClause = Object.keys(updateData).map(key => `\`${key}\` = ?`).join(', '); - const values = [...Object.values(updateData), asset.id]; - - await connection.query( - `UPDATE asset_pc SET ${setClause} WHERE id = ?`, - values - ); - console.log(` ✅ Restored: ${asset.asset_code} (Code: ${serverCode})`); - } else { - console.log(` ⚠️ No Excel match for server code: ${serverCode}`); - } - } - - console.log('🎉 Restoration completed!'); - - } catch (err) { - console.error('❌ Restoration failed:', err); - } finally { - await connection.end(); - } -} - -restoreData(); diff --git a/server.js b/server.js index 5762053..0e6a598 100644 --- a/server.js +++ b/server.js @@ -88,54 +88,30 @@ const saveAssetsBatch = async (tableName, items, res, context) => { // --- Routes --- -// 0. User Management -app.get('/api/users', (req, res) => fetchAssets('system_users', res, 'USERS')); -app.post('/api/users/batch', (req, res) => saveAssetsBatch('system_users', req.body, res, 'USERS BATCH')); +const routeMap = { + '/api/users': { table: 'system_users', context: 'USERS' }, + '/api/pc': { table: 'asset_pc', context: 'PC' }, + '/api/server': { table: 'asset_server', context: 'SERVER' }, + '/api/storage': { table: 'asset_storage', context: 'STORAGE' }, + '/api/network': { table: 'asset_network', context: 'NETWORK' }, + '/api/sw/internal': { table: 'asset_sw_internal', context: 'SW INTERNAL' }, + '/api/sw/external': { table: 'asset_sw_external', context: 'SW EXTERNAL' }, + '/api/survey': { table: 'asset_survey', context: 'SURVEY' }, + '/api/pc-parts': { table: 'asset_pc_parts', context: 'PC PARTS' }, + '/api/equipment': { table: 'asset_equipment', context: 'EQUIPMENT' }, + '/api/office-supplies': { table: 'asset_office_supplies', context: 'OFFICE SUPPLIES' }, + '/api/cloud': { table: 'asset_cloud', context: 'CLOUD' }, + '/api/domain': { table: 'asset_domain', context: 'DOMAIN' }, + '/api/cost': { table: 'asset_cost', context: 'COST' }, + '/api/vip': { table: 'asset_vip', context: 'VIP' }, + '/api/asset/software/assignment': { table: 'asset_software_assignment', context: 'SW ASSIGN' } +}; -// 1. Hardware Assets -app.get('/api/pc', (req, res) => fetchAssets('asset_pc', res, 'PC')); -app.post('/api/pc/batch', (req, res) => saveAssetsBatch('asset_pc', req.body, res, 'PC BATCH')); - -app.get('/api/server', (req, res) => fetchAssets('asset_server', res, 'SERVER')); -app.post('/api/server/batch', (req, res) => saveAssetsBatch('asset_server', req.body, res, 'SERVER BATCH')); - -app.get('/api/storage', (req, res) => fetchAssets('asset_storage', res, 'STORAGE')); -app.post('/api/storage/batch', (req, res) => saveAssetsBatch('asset_storage', req.body, res, 'STORAGE BATCH')); - -app.get('/api/network', (req, res) => fetchAssets('asset_network', res, 'NETWORK')); -app.post('/api/network/batch', (req, res) => saveAssetsBatch('asset_network', req.body, res, 'NETWORK BATCH')); - -// 2. Software Assets -app.get('/api/sw/internal', (req, res) => fetchAssets('asset_sw_internal', res, 'SW INTERNAL')); -app.post('/api/sw/internal/batch', (req, res) => saveAssetsBatch('asset_sw_internal', req.body, res, 'SW INTERNAL BATCH')); - -app.get('/api/sw/external', (req, res) => fetchAssets('asset_sw_external', res, 'SW EXTERNAL')); -app.post('/api/sw/external/batch', (req, res) => saveAssetsBatch('asset_sw_external', req.body, res, 'SW EXTERNAL BATCH')); - -// 3. Other Assets -app.get('/api/survey', (req, res) => fetchAssets('asset_survey', res, 'SURVEY')); -app.post('/api/survey/batch', (req, res) => saveAssetsBatch('asset_survey', req.body, res, 'SURVEY BATCH')); - -app.get('/api/pc-parts', (req, res) => fetchAssets('asset_pc_parts', res, 'PC PARTS')); -app.post('/api/pc-parts/batch', (req, res) => saveAssetsBatch('asset_pc_parts', req.body, res, 'PC PARTS BATCH')); - -app.get('/api/equipment', (req, res) => fetchAssets('asset_equipment', res, 'EQUIPMENT')); -app.post('/api/equipment/batch', (req, res) => saveAssetsBatch('asset_equipment', req.body, res, 'EQUIPMENT BATCH')); - -app.get('/api/office-supplies', (req, res) => fetchAssets('asset_office_supplies', res, 'OFFICE SUPPLIES')); -app.post('/api/office-supplies/batch', (req, res) => saveAssetsBatch('asset_office_supplies', req.body, res, 'OFFICE SUPPLIES BATCH')); - -app.get('/api/cloud', (req, res) => fetchAssets('asset_cloud', res, 'CLOUD')); -app.post('/api/cloud/batch', (req, res) => saveAssetsBatch('asset_cloud', req.body, res, 'CLOUD BATCH')); - -app.get('/api/domain', (req, res) => fetchAssets('asset_domain', res, 'DOMAIN')); -app.post('/api/domain/batch', (req, res) => saveAssetsBatch('asset_domain', req.body, res, 'DOMAIN BATCH')); - -app.get('/api/cost', (req, res) => fetchAssets('asset_cost', res, 'COST')); -app.post('/api/cost/batch', (req, res) => saveAssetsBatch('asset_cost', req.body, res, 'COST BATCH')); - -app.get('/api/vip', (req, res) => fetchAssets('asset_vip', res, 'VIP')); -app.post('/api/vip/batch', (req, res) => saveAssetsBatch('asset_vip', req.body, res, 'VIP BATCH')); +// 동적 라우팅 생성 (Dynamic Routing) +Object.entries(routeMap).forEach(([route, { table, context }]) => { + app.get(route, (req, res) => fetchAssets(table, res, context)); + app.post(`${route}/batch`, (req, res) => saveAssetsBatch(table, req.body, res, `${context} BATCH`)); +}); // 4. Legacy/Auxiliary (History & Assignment) app.get('/api/asset/history', (req, res) => fetchAssets('asset_history', res, 'HISTORY')); @@ -160,9 +136,6 @@ app.post('/api/asset/history/batch', async (req, res) => { } catch (err) { await connection.rollback(); handleError(res, err, 'BATCH HISTORY'); } finally { connection.release(); } }); -app.get('/api/asset/software/assignment', (req, res) => fetchAssets('asset_software_assignment', res, 'SW ASSIGN')); -app.post('/api/asset/software/assignment/batch', (req, res) => saveAssetsBatch('asset_software_assignment', req.body, res, 'SW ASSIGN BATCH')); - // 5. Utility app.get('/api/generate-asset-code', async (req, res) => { try { diff --git a/src/components/Modal/DomainModal.ts b/src/components/Modal/DomainModal.ts index 3aedd02..d0702dd 100644 --- a/src/components/Modal/DomainModal.ts +++ b/src/components/Modal/DomainModal.ts @@ -5,6 +5,7 @@ import { generateOptionsHTML, setEditLock } from './ModalUtils'; import { createIcons, X, Save, Database, CalendarClock, Edit2 } from 'lucide'; import { formatExcelDate } from '../../core/excelHandler'; import { UI_TEXT } from '../../core/schema'; +import { API_BASE_URL } from '../../core/utils'; let currentItem: any = null; diff --git a/src/components/Modal/SWModal.ts b/src/components/Modal/SWModal.ts index ebdf65f..1e43401 100644 --- a/src/components/Modal/SWModal.ts +++ b/src/components/Modal/SWModal.ts @@ -4,6 +4,7 @@ import { openSwUserModal } from './SWUserModal'; import { createIcons, History, Plus, X, Save, Edit2, RotateCcw, Calendar } from 'lucide'; import { CORP_LIST } from './SharedData'; import { ASSET_SCHEMA, UI_TEXT } from '../../core/schema'; +import { API_BASE_URL } from '../../core/utils'; import { generateOptionsHTML, setFieldValue, @@ -433,7 +434,7 @@ export function initSwModal(onSave: () => void, closeModals: () => void) { }; // Call generic API for logs (could be added to state.ts) - await fetch(`http://${location.hostname}:3000/api/asset/history/batch`, { + await fetch(`${API_BASE_URL}/api/asset/history/batch`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify([...state.masterData.logs, log]) diff --git a/src/core/dummyDataGenerator.ts b/src/core/dummyDataGenerator.ts deleted file mode 100644 index fde0f2e..0000000 --- a/src/core/dummyDataGenerator.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { MasterAssetData, HardwareAsset, SoftwareAsset, SWUser } from './excelHandler'; - -const corps = ['한맥', '삼안', '바론']; -const users = ['홍길동', '김철수', '이영희', '박지훈', '김팀장', '신유진', '윤대웅', '마리아']; -const depts = ['설계팀', '기술팀', '경영지원팀', '영업팀']; - -function rand(arr: any[]) { - return arr[Math.floor(Math.random() * arr.length)]; -} - -function randDate(startYear: number, endYear: number) { - const y = Math.floor(Math.random() * (endYear - startYear + 1)) + startYear; - const m = String(Math.floor(Math.random() * 12) + 1).padStart(2, '0'); - const d = String(Math.floor(Math.random() * 28) + 1).padStart(2, '0'); - return `${y}-${m}-${d}`; -} - -function randUser() { // 25% 확률로 유휴자산 할당 - return Math.random() < 0.25 ? '' : rand(users); -} - -export function generateDummyData(): MasterAssetData { - const pc: HardwareAsset[] = []; - const server: HardwareAsset[] = []; - const storage: HardwareAsset[] = []; - const equip: HardwareAsset[] = []; - const mobile: HardwareAsset[] = []; - const subSw: SoftwareAsset[] = []; - const permSw: SoftwareAsset[] = []; - const swUsers: any[] = []; - const logs: any[] = []; - - // 1. 개인PC 50개 - for (let i = 1; i <= 50; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; - pc.push({ - id: Math.random().toString(36).substring(2, 9), - type: '개인PC', - 법인: rand(corps), - 자산코드: `HM-PC-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: '', - 위치: `${rand(['본사', '지사'])} ${Math.floor(Math.random()*5)+1}층`, - 사용자: randUser(), - CPU: rand(['i5-10400', 'i7-12700', 'Ryzen 5', 'Ryzen 7']), - GPU: rand(['-', 'GTX 1660', 'RTX 3060', 'RTX 4070']), - RAM: rand(['16GB', '32GB']), - SSD1: rand(['256GB', '512GB', '1TB']), - SSD2: '', - HDD1: rand(['-', '1TB', '2TB']), - HDD2: '', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: String(Math.floor(Math.random()*100 + 50) * 10000).replace(/\B(?=(\d{3})+(?!\d))/g, ','), - 구매업체: rand(['다나와', '컴퓨존', '오피스디포']), - 품의서명: '', - 관리자: '', IP주소: '', MACaddress: '', OS: '', HW사양: '' - }); - } - - // 2. 서버 20개 - for (let i = 1; i <= 20; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; - server.push({ - id: Math.random().toString(36).substring(2, 9), - type: '서버', - 법인: rand(corps), - 자산코드: `HM-SV-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: `웹/DB 서버 #${i}`, - 용도: rand(['웹 서버', 'DB 서버', '백업 서버', '개발 서버']), - storage유형: rand(['물리', 'VM']), - 위치: rand(['IDC 1센터', 'IDC 2센터', '본사 전산실']), - 관리자: rand(users), - 담당자_정: rand(users), - 담당자_부: rand(users), - IP주소: `192.168.10.${i}`, - 원격접속: `ssh://192.168.10.${i}:22`, - MACaddress: '00:11:22:33:44:' + String(i).padStart(2, '0'), - OS: rand(['Windows Server 2019', 'Ubuntu 22.04 LTS', 'CentOS 7']), - 모델명: rand(['Dell PowerEdge R740', 'HP ProLiant DL380', 'Lenovo ThinkSystem']), - CPU: rand(['Xeon Silver 4210', 'Xeon Gold 6248', 'EPYC 7702']), - RAM: rand(['64GB', '128GB', '256GB']), - GPU: rand(['-', 'RTX A4000', 'Tesla V100']), - SSD1: rand(['512GB SSD', '1TB NVMe']), - SSD2: rand(['-', '1TB SSD', '2TB SSD']), - HDD1: rand(['-', '4TB HDD', '8TB HDD']), - 모니터링: rand(['Zabbix', 'Grafana', 'PRTG']), - 비고: i % 5 === 0 ? '정기 점검 대상' : '-', - HW사양: 'Xeon 16Core, 64GB RAM', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '5,000,000', - 구매업체: '서버뱅크', - 품의서명: '' - }); - } - - // 3. 스토리지 10개 - for (let i = 1; i <= 10; i++) { - const purchaseYear = Math.floor(Math.random() * 10) + 2017; - storage.push({ - id: Math.random().toString(36).substring(2, 9), - type: '스토리지', - 법인: rand(corps), - storage유형: rand(['NAS', 'DAS']), - 자산코드: `HM-ST-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: `백업 스토리지 #${i}`, - 위치: '전산실', - 모델명: rand(['Synology DS920+', 'QNAP TS-453D']), - 용량: rand(['16TB', '32TB', '64TB']), - 담당자_정: randUser(), - 담당자_부: rand(users), - IP주소: `192.168.20.${i}`, - MACaddress: '', - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '1,500,000', - 구매업체: '스토리지넷', - 품의서명: '', - 관리자: '', OS: '', HW사양: '' - }); - } - - // 4. 전산비품 15개 - for (let i = 1; i <= 15; i++) { - const purchaseYear = Math.floor(Math.random() * 8) + 2019; - equip.push({ - id: Math.random().toString(36).substring(2, 9), - type: '전산비품', - 법인: rand(corps), - 비품유형: rand(['프린터', '모니터', 'UPS']), - 자산코드: `HM-EQ-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: `비품 #${i}`, - 위치: rand(['본사', '지사']), - 관리자: randUser(), - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '300,000', - 구매업체: '오피스공구', - 품의서명: '', - IP주소: '', MACaddress: '', OS: '', HW사양: '' - }); - } - - // 5. 모바일기기 10개 - for (let i = 1; i <= 10; i++) { - const purchaseYear = Math.floor(Math.random() * 5) + 2022; - mobile.push({ - id: Math.random().toString(36).substring(2, 9), - type: '모바일기기', - 법인: rand(corps), - 자산코드: `HM-MO-${purchaseYear}-${String(i).padStart(3, '0')}`, - 명칭: rand(['아이폰 15', '갤럭시 S24', '아이패드 에어']), - 위치: '개인 지급', - 관리자: randUser(), - OS: rand(['iOS', 'Android', 'iPadOS']), - 구매일: randDate(purchaseYear, purchaseYear), - 금액: '1,200,000', - 구매업체: '통신사', - 품의서명: '', - IP주소: '', MACaddress: '', HW사양: '', 비고: '' - }); - } - - // 6. 구독 SW 20개 - for (let i = 1; i <= 20; i++) { - const swId = Math.random().toString(36).substring(2, 9); - subSw.push({ - id: swId, - type: '구독SW', - 분야: rand(['업무공통', '개발S/W']), - 법인: rand(corps), - 제품명: rand(['Adobe CC', 'M365']), - 구매일: '2024-01-01', - 만료일: '2025-01-01', - 금액: '100,000', - 수량: 5, - 계정명: `admin${i}@hm.com`, - 구매업체: '총판', - 비고: '' - }); - swUsers.push({ sw_id: swId, userData: [[rand(corps), rand(depts), '사원', rand(users), '2024.01~12', '신청완료']] }); - } - - // 7. 영구 SW 20개 - for (let i = 1; i <= 20; i++) { - const swId = Math.random().toString(36).substring(2, 9); - permSw.push({ - id: swId, - type: '영구SW', - 분야: rand(['설계S/W']), - 법인: rand(corps), - 제품명: rand(['AutoCAD', '한컴오피스']), - 구매일: '2023-01-01', - 라이선스키: `KEY-${swId}`, - 금액: '500,000', - 수량: 2, - 계정명: `license${i}`, - 구매업체: '총판', - 비고: '' - }); - } - - return { pc, server, storage, equip, mobile, subSw, permSw, cloud: [], swUsers, logs, sw: [], hw: [] }; -} diff --git a/src/core/state.ts b/src/core/state.ts index 51962c5..864737b 100644 --- a/src/core/state.ts +++ b/src/core/state.ts @@ -1,4 +1,5 @@ import { HardwareAsset, SoftwareAsset, SWUser, HardwareLog } from './excelHandler'; +import { API_BASE_URL } from './utils'; // --- State Definitions --- export interface MasterAssetData { @@ -79,8 +80,7 @@ export async function loadMasterDataFromDB() { { key: 'logs', url: '/api/asset/history' } ]; - const host = `http://${location.hostname}:3000`; - const results = await Promise.all(endpoints.map(e => fetch(host + e.url))); + const results = await Promise.all(endpoints.map(e => fetch(API_BASE_URL + e.url))); for (let i = 0; i < endpoints.length; i++) { if (results[i].ok) { @@ -148,7 +148,7 @@ export async function saveAsset(category: string, asset: any) { 'vip': '/api/vip/batch' }; - const url = `http://${location.hostname}:3000${endpointMap[category]}`; + const url = `${API_BASE_URL}${endpointMap[category]}`; const currentList = [...(state.masterData as any)[category]]; const idx = currentList.findIndex(a => a.id === asset.id); @@ -194,7 +194,7 @@ export async function deleteAsset(category: string, assetId: string) { 'vip': '/api/vip/batch' }; - const url = `http://${location.hostname}:3000${endpointMap[category]}`; + const url = `${API_BASE_URL}${endpointMap[category]}`; const currentList = [...(state.masterData as any)[category]]; const filteredList = currentList.filter(a => a.id !== assetId); diff --git a/src/core/utils.ts b/src/core/utils.ts index 28d0bbc..ecfa10a 100644 --- a/src/core/utils.ts +++ b/src/core/utils.ts @@ -1,5 +1,7 @@ import { PAGE_DESCRIPTIONS } from './schema'; +export const API_BASE_URL = `http://${location.hostname}:3000`; + /** * ITAM 공통 유틸리티 함수 */ diff --git a/temp_sw.txt b/temp_sw.txt deleted file mode 100644 index 7da9bab..0000000 Binary files a/temp_sw.txt and /dev/null differ