import React, { useState } from 'react'; import { logger } from '../utils/logger'; import { exportCurrentData } from '../utils/exportData'; import SystemMonitor from '../components/SystemMonitor'; import ExportButton from '../components/ExportButton'; import LoadingSpinner from '../components/LoadingSpinner'; const Settings: React.FC = () => { const [activeTab, setActiveTab] = useState<'monitoring' | 'logs' | 'export'>('monitoring'); const [isExporting, setIsExporting] = useState(false); const handleExportLogs = async (format: 'csv' | 'json') => { setIsExporting(true); try { const logs = logger.exportLogs(); const userActions = logger.exportUserActions(); const exportData = { logs, userActions, exportTime: new Date().toISOString() }; if (format === 'csv') { // CSV 형식으로 변환 const csvContent = convertLogsToCSV(exportData); downloadFile(csvContent, `logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.csv`, 'text/csv'); } else { // JSON 형식으로 변환 const jsonContent = JSON.stringify(exportData, null, 2); downloadFile(jsonContent, `logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.json`, 'application/json'); } } catch (error) { console.error('Failed to export logs:', error); } finally { setIsExporting(false); } }; const convertLogsToCSV = (data: any) => { const headers = ['Timestamp', 'Level', 'Message', 'Component', 'Session ID']; const rows = [ ...data.logs.map((log: any) => [ log.timestamp, log.level, log.message, log.data?.component || '', log.sessionId ]), ...data.userActions.map((action: any) => [ action.timestamp, 'USER_ACTION', action.action, action.component, action.sessionId ]) ]; let csv = headers.join(',') + '\n'; csv += rows.map(row => row.map((cell: any) => typeof cell === 'string' && cell.includes(',') ? `"${cell}"` : cell ).join(',') ).join('\n'); return csv; }; const downloadFile = (content: string, filename: string, mimeType: string) => { const blob = new Blob([content], { type: mimeType }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); }; const clearLogs = () => { if (window.confirm('모든 로그를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.')) { logger.clearLogs(); window.location.reload(); } }; const logStats = logger.getLogStats(); return (

설정

{/* 탭 네비게이션 */}
{/* 탭 컨텐츠 */}
{activeTab === 'monitoring' && (
)} {activeTab === 'logs' && (

로그 관리

{logStats.total}
전체 로그
{logStats.byLevel.debug}
Debug
{logStats.byLevel.info}
Info
{logStats.byLevel.warn}
Warning
{logStats.byLevel.error}
Error
)} {activeTab === 'export' && (

데이터 내보내기

센서 데이터와 로그를 다양한 형식으로 내보낼 수 있습니다.

센서 데이터

현재 페이지의 센서 데이터를 CSV 또는 JSON 형식으로 내보냅니다.

시스템 로그

애플리케이션 로그와 사용자 행동 데이터를 내보냅니다.

)}
); }; export default Settings;