fix status issues ollama

This commit is contained in:
larssand
2026-07-06 11:43:17 +02:00
parent b1a70351a6
commit 9eb2448eb7
4 changed files with 18 additions and 7 deletions

View File

@@ -251,6 +251,8 @@ function llmCapability(llm, configuration) {
const status = String(llm.status || 'starting');
if (status === 'ok') return {state: 'on', detail: 'ok'};
if (status === 'cached') return {state: 'on', detail: 'cached'};
if (status === 'cached_assessment_error') return {state: 'warn', detail: 'cached, assessment unavailable'};
if (status === 'assessment_unavailable') return {state: 'warn', detail: 'assessment unavailable'};
if (status === 'error' && String(llm.text || '').trim()) return {state: 'warn', detail: 'cached, assessment error'};
if (status === 'error') return {state: 'warn', detail: 'assessment error'};
return {state: 'warn', detail: status};
@@ -619,6 +621,7 @@ async function refresh() {
`Baseline DB size: ${esc(bytes((data.baseline || {}).size_bytes || 0))}`,
`Discovery fields recorded: ${esc((data.baseline || {}).discovery_fields_recorded || 0)}`,
`Discovery cache events: ${esc((data.baseline || {}).discovery_cache_events || 0)}`,
['assessment_unavailable','cached_assessment_error'].includes(llm.status) ? `Ollama assessment: unavailable (${esc(llm.error || 'unknown error')})` : '',
llm.status === 'error' ? `<span class="sev-high">Ollama assessment error: ${esc(llm.error || 'unknown error')}</span>` : '',
`MCP status: ${esc(mcp.status || 'unknown')}`,
mcp.status === 'refreshing' && pollStartedAt ? `MCP poll running: ${esc(pollRunningSeconds)}s` : '',
@@ -641,8 +644,7 @@ async function refresh() {
configuration.log_source === 'graylog_mcp' && mcp.status !== 'refreshing' && enabledStreams.length > 0 && displayedRawEvents === 0 ? `<span class="sev-high">No raw events fetched from enabled streams. Check poll window, Graylog query, stream permissions, and Diagnostics -> Stream Coverage.</span>` : '',
enabledWithNoRawEvents.length && mcp.status !== 'refreshing' ? `<span class="sev-high">${esc(enabledWithNoRawEvents.length)} enabled stream(s) returned zero raw events in ${esc(zeroRawWindow)}.</span>` : '',
mcp.coverage_warning ? `<span class="sev-high">${esc(mcp.coverage_warning)}</span>` : '',
advisor.status === 'heuristic_fallback' ? `Profile advisor: heuristic fallback (${esc(advisor.error || 'advisor unavailable')})` : '',
advisor.status === 'error' ? `<span class="sev-high">Profile advisor error: ${esc(advisor.error || 'unknown error')}</span>` : ''
['heuristic_fallback','error'].includes(advisor.status) ? `Profile advisor: heuristic fallback (${esc(advisor.error || 'advisor unavailable')})` : ''
].filter(Boolean).join('<br>');
document.getElementById('health').innerHTML = [
metric('Enabled streams', enabledStreams.length), metric('Streams missing profile', streamsMissingProfile), metric('MCP aggregate events', displayedAggregateEvents), metric('MCP raw sample', displayedRawEvents), metric('Partial streams', mcp.partial_streams || 0), metric('Sample capped', mcp.sample_limited_streams || 0), metric('Truncated streams', mcp.truncated_streams || 0), metric('Correlated entities', correlations.length)

View File

@@ -598,7 +598,7 @@ def add_llm_assessment(status: dict[str, object], *, previous: str | None = None
except Exception as exc:
status["llm_assessment"] = {
"enabled": True,
"status": "error",
"status": "cached_assessment_error" if previous else "assessment_unavailable",
"generated_at": int(time.time()),
"error": str(exc),
"text": previous or "",

View File

@@ -73,8 +73,8 @@ class DashboardTests(unittest.TestCase):
def test_dashboard_labels_ollama_assessment_errors(self):
self.assertIn("function llmCapability", HTML)
self.assertIn("assessment error", HTML)
self.assertIn("Ollama assessment error", HTML)
self.assertIn("assessment unavailable", HTML)
self.assertIn("Ollama assessment: unavailable", HTML)
if __name__ == "__main__":

View File

@@ -178,15 +178,24 @@ class MonitorTests(unittest.TestCase):
self.assertEqual(status["capabilities"]["graylog_mcp"]["status"], "no_streams_enabled")
self.assertEqual(status["summary"]["total"], 0)
def test_add_llm_assessment_records_error_without_ollama(self):
def test_add_llm_assessment_uses_cached_error_status_with_previous_text(self):
status = {"summary": {}, "anomalies": []}
with patch("fgai.monitor.ollama_dashboard_assessment", side_effect=TimeoutError("timeout")):
add_llm_assessment(status, previous="old text")
self.assertEqual(status["llm_assessment"]["status"], "error")
self.assertEqual(status["llm_assessment"]["status"], "cached_assessment_error")
self.assertEqual(status["llm_assessment"]["text"], "old text")
def test_add_llm_assessment_records_unavailable_without_previous_text(self):
status = {"summary": {}, "anomalies": []}
with patch("fgai.monitor.ollama_dashboard_assessment", side_effect=TimeoutError("timeout")):
add_llm_assessment(status)
self.assertEqual(status["llm_assessment"]["status"], "assessment_unavailable")
self.assertEqual(status["llm_assessment"]["text"], "")
def test_add_llm_assessment_records_text(self):
status = {"summary": {}, "anomalies": []}