diff --git a/frontend/src/components/Analytics.tsx b/frontend/src/components/Analytics.tsx index efd32bc..86f2d1b 100644 --- a/frontend/src/components/Analytics.tsx +++ b/frontend/src/components/Analytics.tsx @@ -92,8 +92,8 @@ const Analytics: React.FC = () => { setProcessingStats(stats); setHealthStatus(health); } catch (err) { - setError('Failed to load analytics data'); console.error('Analytics loading error:', err); + setError('Failed to load analytics data. Some endpoints may not be available.'); } finally { setLoading(false); } @@ -164,7 +164,7 @@ const Analytics: React.FC = () => { {/* System Health Overview */} - {healthStatus && ( + {healthStatus?.overall && (

System Health

@@ -177,25 +177,25 @@ const Analytics: React.FC = () => { Overall Status

- {healthStatus.status.charAt(0).toUpperCase() + healthStatus.status.slice(1)} + {healthStatus.status?.charAt(0).toUpperCase() + healthStatus.status?.slice(1)}

Success Rate

- {(healthStatus.overall.successRate * 100).toFixed(1)}% + {((healthStatus.overall.successRate ?? 0) * 100).toFixed(1)}%

Avg Processing Time

- {formatTime(healthStatus.overall.averageProcessingTime)} + {formatTime(healthStatus.overall.averageProcessingTime ?? 0)}

Active Sessions

- {healthStatus.overall.activeSessions} + {healthStatus.overall.activeSessions ?? 0}

@@ -213,24 +213,24 @@ const Analytics: React.FC = () => {
Chunking - {processingStats.totalDocuments > 0 - ? ((processingStats.chunkingSuccess / processingStats.totalDocuments) * 100).toFixed(1) + {processingStats.totalDocuments > 0 + ? (((processingStats.chunkingSuccess ?? 0) / processingStats.totalDocuments) * 100).toFixed(1) : 0}%
RAG - {processingStats.totalDocuments > 0 - ? ((processingStats.ragSuccess / processingStats.totalDocuments) * 100).toFixed(1) + {processingStats.totalDocuments > 0 + ? (((processingStats.ragSuccess ?? 0) / processingStats.totalDocuments) * 100).toFixed(1) : 0}%
Agentic RAG - {processingStats.totalDocuments > 0 - ? ((processingStats.agenticRagSuccess / processingStats.totalDocuments) * 100).toFixed(1) + {processingStats.totalDocuments > 0 + ? (((processingStats.agenticRagSuccess ?? 0) / processingStats.totalDocuments) * 100).toFixed(1) : 0}%
@@ -241,15 +241,15 @@ const Analytics: React.FC = () => {
Chunking - {formatTime(processingStats.averageProcessingTime.chunking)} + {formatTime(processingStats.averageProcessingTime?.chunking ?? 0)}
RAG - {formatTime(processingStats.averageProcessingTime.rag)} + {formatTime(processingStats.averageProcessingTime?.rag ?? 0)}
Agentic RAG - {formatTime(processingStats.averageProcessingTime.agenticRag)} + {formatTime(processingStats.averageProcessingTime?.agenticRag ?? 0)}
@@ -258,15 +258,15 @@ const Analytics: React.FC = () => {
Chunking - {processingStats.averageApiCalls.chunking.toFixed(1)} + {(processingStats.averageApiCalls?.chunking ?? 0).toFixed(1)}
RAG - {processingStats.averageApiCalls.rag.toFixed(1)} + {(processingStats.averageApiCalls?.rag ?? 0).toFixed(1)}
Agentic RAG - {processingStats.averageApiCalls.agenticRag.toFixed(1)} + {(processingStats.averageApiCalls?.agenticRag ?? 0).toFixed(1)}
@@ -291,7 +291,7 @@ const Analytics: React.FC = () => { - {analyticsData.sessionStats.map((stat, index) => ( + {(analyticsData.sessionStats ?? []).map((stat, index) => ( {new Date(stat.date).toLocaleDateString()} @@ -318,7 +318,7 @@ const Analytics: React.FC = () => {

Agent Performance

- {analyticsData.agentStats.map((agent, index) => ( + {(analyticsData.agentStats ?? []).map((agent, index) => (

{agent.agent_name.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} @@ -342,7 +342,7 @@ const Analytics: React.FC = () => {

Avg Retries: - {parseFloat(agent.avg_retries).toFixed(1)} + {(parseFloat(agent.avg_retries) || 0).toFixed(1)}
@@ -356,7 +356,7 @@ const Analytics: React.FC = () => {

Quality Metrics

- {analyticsData.qualityStats.map((metric, index) => ( + {(analyticsData.qualityStats ?? []).map((metric, index) => (

{metric.metric_type.charAt(0).toUpperCase() + metric.metric_type.slice(1)}